objective-c - 在 dealloc 中将委托(delegate)设置为 nil

标签 objective-c xcode delegates instance-variables dealloc

在 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/

相关文章:

objective-c - 如何在像 NSDictionary 类的 enumerateObjectsUsingBlock 这样的 block 上使用停止条件?

ios - 在 Interface Builder 中设置为 UIButton 的属性标题属性在应用程序中被忽略

iphone - 在 TableView 中将项目标记为新添加

objective-c - 无论如何都知道弹出窗口是从哪里出现的?

xcode - 抑制: "#warning is language extension"

c# - 为什么这种隐式转换不起作用?

ios - 基于 NSNotification 的 iOS App

.net - 使用反射添加事件处理程序时抛出 TargetException

ios - 如何在 NSString 中捕获特殊指示的**字符**并加粗中间的内容?

iphone - 如何在 HTML 文档中找到数字然后用作 NSString?