2009-12-04 54 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