A有一個視圖控制器,它創建一個「下載器」對象,它具有對視圖控制器的引用(作爲委託)。如果下載器成功下載該項目,則回調視圖控制器。只要你停留在視圖上,這工作正常,但如果你在下載完成之前離開,我會得到EXC_BAD_ACCESS
。我明白爲什麼會發生這種情況,但有什麼方法可以檢查一個對象是否仍然被分配? 我試圖用delegate != nil
和[delegate respondsToSelector:]
進行測試,但它嗆了。使用委託模式時避免EXC_BAD_ACCESS
if (!self.delegate || ![self.delegate respondsToSelector:@selector(downloadComplete:)]) {
// delegate is gone, go away quietly
[self autorelease];
return;
}
else {
// delegate is still around
[self.delegate downloadComplete:result];
}
我知道我可以,
一個)已下載器對象保留視圖控制器
b)中保持在視圖控制器下載程序的陣列,並且設置它們的代表值,以零時我取消分配視圖控制器。
但我不知道是否有一個更簡單的方法,我只是測試委託地址是否包含有效的對象?
如果你可以測試一個地址是否包含一個有效的對象,根據定義,它會,因爲它是有效的訪問它來測試? – 2010-04-21 03:46:46
objective-c有很多抽象...我可以想象一個世界,運行時能夠分辨出一個地址與一個有效對象之間的區別,以及一個被釋放的地址。 – 2010-04-21 04:22:28