在 Objective-C 中,我理解如果一个对象将自己设置为另一个对象的委托(delegate),它应该在其 dealloc
中将该对象的委托(delegate)设置为 nil
以避免在它消失后收到发送的消息。
但是,当使用 Accessorizer(一种 Xcode 实用程序)时,它生成的 stub 代码还会在具有委托(delegate)实例的类的 dealloc
中放置一个 delegate = nil
多变的。这样做的目的是什么?
最佳答案
这是一种防御性编程举措。它正在清除对委托(delegate)对象的引用,以防你的对象中的其他东西在你告诉它你已经完成了它之后试图访问委托(delegate)。作为你的 dealloc 的一部分,你可能有一个方法或做一些事情来触发一个调用委托(delegate)的 KVO 通知。因此,将委托(delegate)的引用设置为 nil 可以防止这种情况发生。如果它真的发生了,你可能会遇到一些奇怪的崩溃,这些崩溃很有趣,可以重现和修复。
关于objective-c - 在 dealloc 中将委托(delegate)设置为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6118311/