2010-02-11 32 views

回答

4

簡短的回答:是的。

無論您是否使用Interface Builder,只要委託人放棄委託對象的所有權(即釋放)委託人即可將其本身作爲委託對象的委託移除。這可以最遲在其dealloc方法中,但它也可以在更早的時候發生。

原因:通常情況下,代表某種委派對象的父對象。很多時候,委託和委託對象的所有者是同一個對象。因爲父對象通常保留子對象,所以爲了避免循環引用,委託(即子對象)對象通常不保留其委託。在這些情況下,可能會發生委託對象在委託對象仍然存活的情況下被取消分配(如果其他對象也保留了它)。如果現在委託對象試圖訪問它的委託(它不再存在),程序可能會崩潰。

父對象釋放其子對象之前(通常,但並非總是如此,在其dealloc方法),它應該調用childObject.delegate = nil;所以,正確的。

+2

除非你真正的委託是你不應該喪失已在'delegate'屬性: '如果([otherObject代表] ==個體經營)[otherObject setDelegate:無];' – 2010-02-13 02:03:19

+0

+1傑里米。感謝您的更正。 – 2010-02-13 07:13:24

+0

1)Interface Builder設置了連接,所以不應該爲它的設置負責? 2)父對象可能甚至沒有對委託對象的引用,因爲它是在Interface Builder中創建的,沒有明確的出口。那麼你如何解除其委託? – user102008 2012-04-10 18:07:40

相關問題