0

使用 NSURLConnection 时,我可以在实例化它的方法结束时释放它吗?

NSURLConnection* connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
...
...
[connection release];

然后它继续异步过程,还是我需要保留它?

4

4 回答 4

2

完成后需要释放连接对象。

NSURLConnection在委托方法中释放它-

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
于 2012-05-29T08:15:33.867 回答
0

最好的方法是使用 connectionWithRequest:Delegate: 以便它自动释放。

但是,您还应该保留指向您的 NSURLConnection 的指针,直到连接结束才有机会取消委托。否则,如果您的连接没有返回但您的委托在被连接调用之前被释放,它将崩溃。(你会得到错误:消息发送到已释放的实例)

所以最好的办法是保留一个指向你的 NSURLConnection 的指针,并在连接返回时将指针设置为 nil 。所以在 ConnectionDidFinishLoading

connection = nil;

现在,如果委托被解除分配,您可以在 dealloc 方法中放置一些东西,如果您的委托是 viewController,则可以在 viewDidUnload 中放置一些东西

if (connection != nil) connection.delegate = nil;
于 2012-05-29T10:31:54.120 回答
0

您应该通过“分配”来保持连接,原因是:您需要管理连接,例如:取消它。

于 2012-05-29T08:20:26.003 回答
0

我真的建议您尽可能使用便利分配器。您返回的对象是自动释放的意思(简单来说)您不必担心手动释放或保留。要使用经验法则回答您的问题:使用

connectionWithRequest:delegate:

你可以走了。

于 2012-05-29T08:28:13.097 回答