objective-c - 为什么 Objective-C 委托(delegate)通常被赋予属性分

我正在浏览由 Scott Stevenson 维护的精彩博客,我正在尝试理解一个基本的 Objective-C 概念,即为委托(delegate)分配“分配”属性与“保留”。请注意,两者在垃圾收集环境中是相同的。我最关心的是非基于 GC 的环境(例如:iPhone)。

直接来自 Scott 的博客:

“assign 关键字将生成一个 setter,它直接将值分配给实例变量,而不是复制或保留它。这最适用于 NSInteger 和 CGFloat 等原始类型,或者您不直接拥有的对象,例如委托(delegate)。”

您不直接拥有委​​托对象是什么意思?我通常会保留我的委托(delegate),因为如果我不希望他们陷入深渊,保留会为我解决这个问题。我通常将 UITableViewController 从其各自的数据源和委托(delegate)中抽象出来。我也保留了那个特定的对象。我想确保它永远不会消失,所以我的 UITableView 总是有它的委托(delegate)。

有人可以进一步解释我错在哪里/为什么错,这样我就可以理解 Objective-C 2.0 编程中使用委托(delegate)而不是保留的分配属性的常见范例?

谢谢!

最佳答案

您避免保留委托(delegate)的原因是您需要避免保留循环:

A 创造 B A 将自己设置为 B 的委托(delegate) … A 被其所有者释放

如果 B 保留了 A,A 将不会被释放,因为 B 拥有 A,因此 A 的 dealloc 将永远不会被调用,导致 A 和 B 泄漏。

您不应该担心 A 会消失,因为它拥有 B 并因此在 dealloc 中摆脱它。

关于objective-c - 为什么 Objective-C 委托(delegate)通常被赋予属性分配而不是保留?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/918698/

相关文章:

ios - 如何在 NSAttributedString 中创建可点击链接?

ios - Storyboard 中的 Modal 和 Push segue 有什么区别?

objective-c - 最佳实践? - 数组/字典作为核心数据实体属性

ios - 如何在 Swift 中设置返回按钮文本

objective-c - 解决 Objective-C 命名空间冲突的最佳方法是什么?

objective-c - Objective-C Cocoa 应用程序中的正则表达式

objective-c - Objective-C中方法旁边的加号和减号是什么意思?

ios - 在 UITableViewCell 中有一个 UITextField

objective-c - 是否可以刷新 UITableView 中的单个 UITableViewC

ios - UIImageView 上的 UIGestureRecognizer