在Objective-C中,我理解如果一个对象将自己设置为另一个对象的委托,它应该将该对象的委托设置为其dealloc
中的nil
,以避免在它离开后收到消息。
但是,当使用Accessorizer(一个Xcode实用程序)时,它生成的存根代码也会在具有委托实例变量的类的dealloc
中放入一个delegate = nil
。这样做的目的是什么?
这是一个防御性的编程动作。它会清除对委托对象的引用,以防在你告诉对象中的其他对象你已经完成了对它的处理后,它试图访问该委托。作为解除锁定的一部分,你可能有一个方法或做一些事情来触发KVO通知,从而调用该委托。因此,将委托的引用设置为nil可以防止这种情况发生。如果真的发生了,你可能会遇到一些奇怪的崩溃,这些崩溃很容易复制和修复。