2011-05-25 73 views
8

在Objective-C中,我明白如果一個對象將自己設置爲另一個對象的委託,它應該在dealloc中將該對象的委託設置爲nil,以避免在消息離開後發送消息。在dealloc中設置委託爲

但是,使用Accessorizer(一種Xcode實用程序)時,它生成的存根代碼還會將delegate = nil放入具有委託實例變量的類的dealloc中。那是什麼目的?

回答

10

這是一個防守性的編程舉措。它會清除對委託對象的引用,因爲在對象中有其他對象嘗試訪問委託後,告訴它已完成該委派。作爲你的dealloc的一部分,你可能有一個方法,或者做一些觸發KVO通知的代理。因此,將委託的引用設置爲nil可防止發生這種情況。如果確實發生了,那麼最終可能會出現一些有趣的重現和修復的古怪撞擊事件。