Я прочитал это в книге.Зачем освобождать экземпляр NSURLConnection в этом заявлении?
-(IBAction) updateTweets
{
tweetsView.text = @"";
[tweetsData release];
tweetsData = [[NSMutableData alloc] init];
NSURL *url = [NSURL URLWithString:@"http://twitter.com/statuses/public_timeline.xml" ];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL: url];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection release];
[request release];
[activityIndicator startAnimating];
}
В этом утверждении правильно ли выпустить экземпляр «соединения» в это время? После его освобождения, что означает, что этот экземпляр NSURLConnection будет уничтожен, так как его количество ссылок равно 0, как мы собираемся сделать эту операцию соединения после релиза этого экземпляра? БЛАГОДАРЮ.
Я думал, что мы должны выпустить его в одном из следующих методов обратного вызова, не так ли?
connectionDidFinishLoading:
соединение: didFailWithError:
Это похоже на NSAlertView? Сначала вы создаете экземпляр NSAlertView, покажите его, а затем немедленно отпустите его, но на экране все еще есть alertView, он все еще работает, не так ли? Но это все еще заставляет меня смутить, ПОЧЕМУ мы можем управлять объектом, который был отчужден в теории? –
Я подозреваю, что объект сохраняется в другом потоке. Когда вы отпускаете его, у другого потока все еще есть удержание, поэтому оно не уничтожается. Но, поскольку вы опубликовали свою ссылку в своем потоке, использование этой ссылки неверно. Если вы сделали Obj * o = [[Obj alloc] init]; Obj * p = [o сохранить]; [p release]; [p someMethod]; Объект по-прежнему существует (сохранен o), но вы освободили p, уменьшив количество удержаний, но когда вы вызываете [p someMethod]; Я думаю, что это приведет к сбою, даже если объект используется для обозначения того, что на самом деле существует. Не уверен, но и не на моем Mac, чтобы проверить! – Tom