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

匿名

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

直接来自Scott的博客:

“ assign关键字将生成一个设置器,该设置器将值直接分配给实例变量,而不是复制或保留它。这最适合诸如NSInteger和CGFloat之类的原始类型,或不直接拥有的对象(例如委托)。”

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

有人可以进一步解释我错在哪里/为什么错了,以便我能了解在Objective-C 2.0编程中使用委托上的assign属性而不是retain的常见范例吗?

谢谢!

安德鲁·波利奥特(Andrew Pouliot)

避免保留委托的原因是,您需要避免保留周期:

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Objective-C属性赋予最佳做法

为什么函数的return语句不是通常的int []

为什么NodeJ通常使用MongoDB而不是Mysql?

为什么将C ++称为“通常”的编译语言?

为什么 C++ 的 NULL 通常是整数文字而不是像 C 中的指针?

为什么Objective-C数组参数不使用冒号?

为什么Objective-C异常不友好?

为什么这个Objective-C ++程序不能编译?

Objective-C为什么需要__NSGlobalBlock__

为什么CGBitmapInfo删除了Objective-C中的kCGBitmapByteOrderDefault?

Objective C故事板为什么ParentViewController为零

为什么UITableView的委托属性的属性不弱

为什么台式机GPU通常使用立即模式渲染而不是基于图块的延迟渲染?

为什么内核 4.4.0-135 需要显式升级而不是通常的 apt 升级?

为什么 Flink 使用 Pushgateway 而不是 Prometheus 通常的 pull 模型进行一般指标收集?

为什么我的某些USB 3.0连接器是绿色而不是通常的蓝色?

为什么$ GOPATH通常设置在〜/ .bashrc和〜/ .bash_profile中而不是〜/ .profile中?

为什么要使用“ slim = tf.contrib.slim”而不是通常导入苗条?

为什么通常在IIFE之后(而不是在脚本顶部)“严格使用”?

为什么我的库无法在CocoaPods上扩展并显示为Objective-c,而不是Swift?

为什么可以在循环中而不是按顺序声明重复的Objective-C对象?

为什么在Objective-C中将指针*用作字符串而不是整数

为什么Objective-C使用头文件而不是Java这样的单文件类?

为什么这种不寻常的Objective-C设计模式不是一个好主意?

为什么Objective-C中的Ioc容器不是一种流行的方法?

为什么Python程序通常比C或C ++编写的等效程序慢?

为什么操作系统内核通常用 C 或 C++ 编写?

为什么我不能使用从Objective-C对象到Swift属性的KVC?

为什么我不能在子类中使用超类的属性(Objective-C)