开发者

Why release the NSURLConnection instance in this statement?

I read this in a book.

-(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];
}

In this statement,is that correct to release the "connection" instance at that time? After releasing it which means this NSURLConnection instance will be destroyed since it's reference count is 0 ,how are we going to make this connection operation work开发者_StackOverflow中文版 after release this instance? THANKS.

I thought we should release it in one of the following callback methods,right?

  • connectionDidFinishLoading:

  • connection:didFailWithError:


It's actually fine to release it there, once the connection is sent out via initWithRequest, the only thing that matters is that the delegate exists or I believe the response will just be silently lost.

From what I can tell, the only reason to not release it there is if you want to call [connection cancel] at some point in one of the delegate functions, in which case it would be best to do what you suggest and release it in BOTH connectionDidFinishLoading and didFailWithError since only one of them will be called (right?).

Edit: For a more thorough answer, NSURLConnection initWithRequest is an asynchronous request. So it actually spawns it's own thread (but calls the delegate functions on the thread that called initWithRequest). So basically, on the thread that calls initWithRequest you are actually done with the connection object and you can release it. All the while it's doing stuff on some other thread that you don't need to be concerned with.

Also I should note that if you do release it there, make sure you DON'T release it in the finish/fail methods, because it won't be a valid object.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜