我在一本书中读过这篇文章。
-(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:
答案 0 :(得分:1)
在那里释放它真的很好,一旦通过initWithRequest发送连接,唯一重要的是委托存在或者我相信响应将会默默地丢失。
据我所知,唯一的理由是不要在其中释放它,如果你想在其中一个委托函数中的某个点调用[连接取消],在这种情况下,最好按照你的建议去做在BODH connectionDidFinishLoading和didFailWithError中释放它,因为只会调用其中一个(对吗?)。
编辑:要获得更全面的答案,NSURLConnection initWithRequest是一个异步请求。所以它实际上产生了它自己的线程(但调用了调用initWithRequest的线程上的委托函数)。所以基本上,在调用initWithRequest的线程上,你实际上已经完成了连接对象,你可以释放它。它一直在做一些你不需要关心的其他线程的东西。
另外我应该注意,如果你确实在那里发布它,请确保你不要在完成/失败方法中释放它,因为它不是一个有效的对象。