0

我在一本书中读到了这个。

-(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 ,我们如何在释放这个实例后使这个连接操作工作?谢谢。

我认为我们应该在以下回调方法之一中释放它,对吧?

  • 连接完成加载:

  • 连接:didFailWithError:

4

1 回答 1

1

在那里释放它实际上很好,一旦通过 initWithRequest 发送连接,唯一重要的是委托存在,或者我相信响应会默默地丢失。

据我所知,不释放它的唯一原因是如果您想在某个委托函数中的某个时间点调用 [connection cancel],在这种情况下,最好按照您的建议执行并在其中发布它BOTH connectionDidFinishLoading 和 didFailWithError 因为只有其中一个会被调用(对吗?)。

编辑:对于更彻底的答案, NSURLConnection initWithRequest 是一个异步请求。所以它实际上产生了它自己的线程(但在调用 initWithRequest 的线程上调用委托函数)。所以基本上,在调用 initWithRequest 的线程上,你实际上已经完成了连接对象,你可以释放它。它一直在做一些你不需要关心的其他线程上的事情。

另外我应该注意,如果你确实在那里释放它,请确保你不要在完成/失败方法中释放它,因为它不是一个有效的对象。

于 2010-05-21T02:12:09.970 回答