2009-12-04 55 views
0

我目前异步使用NSURLConnection与几个UIViews(每个视图处理NSURLConnection作为代表)。我遇到的问题是,当用户切换视图太快,代表变为NSZombie应用程序崩溃 - 这是NSURLConnection不再有活代理。所以,第一个问题是,是否有办法规避这种情况?如何在异步NSURLConnection中处理NSZombies?

第二个问题很简单 - 我该如何处理NSZombie?简单的if(myObject != nil)..根本不起作用。

回答

7

您需要cancelNSURLConnection才能处置它的委托。只需在作为代理人的UIView中保留对NSURLConnection的引用,并致电[urlConnection cancel]即可。

释放消息后,如果继续使用该指针,则需要将指针设置为零。举个例子:

id myObject = [[SomeObject alloc] init]; 

/* Some code */ 

[myObject release]; 
myObject = nil; 

/* Some more code */ 

if (myObject != nil) { 
    [myObject doSomething]; 
} 

但是请注意,这是有效的消息发送到nil,所以你并不需要安全防范的消息发送。它如果myObject == nil不会有任何影响。

+0

谢谢,viewWillDisappear里面的[cancel]是正确的解决方案。 – cocoapriest 2009-12-04 17:35:39

+0

尽管取消连接是出于交通原因的良好习惯,但NSURLConnection的start方法会保留连接的委托,所以委托人不应该首先成为僵尸,除非A.您在某处过度放置委托或B在你打电话给[连接开始]之前它已经是僵尸了。 – dgatwood 2015-06-11 16:24:18