小编典典

为什么 Objective-C 委托通常被赋予属性分配而不是保留?

all

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

直接来自 Scott 的博客:

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

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

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

谢谢!


阅读 60

收藏
2022-08-20

共1个答案

小编典典

避免保留代表的原因是您需要避免保留周期:

A 创建 B A 将自己设置为 B 的委托 - A 由其所有者释放

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

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

2022-08-20