8
在Objective-C中,我明白如果一個對象將自己設置爲另一個對象的委託,它應該在dealloc
中將該對象的委託設置爲nil
,以避免在消息離開後發送消息。在dealloc中設置委託爲
但是,使用Accessorizer(一種Xcode實用程序)時,它生成的存根代碼還會將delegate = nil
放入具有委託實例變量的類的dealloc
中。那是什麼目的?
在Objective-C中,我明白如果一個對象將自己設置爲另一個對象的委託,它應該在dealloc
中將該對象的委託設置爲nil
,以避免在消息離開後發送消息。在dealloc中設置委託爲
但是,使用Accessorizer(一種Xcode實用程序)時,它生成的存根代碼還會將delegate = nil
放入具有委託實例變量的類的dealloc
中。那是什麼目的?
這是一個防守性的編程舉措。它會清除對委託對象的引用,因爲在對象中有其他對象嘗試訪問委託後,告訴它已完成該委派。作爲你的dealloc的一部分,你可能有一個方法,或者做一些觸發KVO通知的代理。因此,將委託的引用設置爲nil可防止發生這種情況。如果確實發生了,那麼最終可能會出現一些有趣的重現和修復的古怪撞擊事件。