为什么Objective-C委托通常给予属性assign而不是retain?

为什么Objective-C委托通常给予属性assign而不是retain?,第1张

概述我正在浏览由Scott Stevenson维护的精彩博客,我试图理解一个基本的Objective-C概念,为委派委派“assign”属性和“retain”。注意,两者在垃圾收集环境中是相同的。我主要关心一个非基于GC的环境(例如:iPhone)。 直接从Scott的博客: “assign关键字将生成一个setter,它将值直接赋给实例变量,而不是复制或保留它。这对于像NSInteger和CGFlo 我正在浏览由Scott Stevenson维护的精彩博客,我试图理解一个基本的Objective-C概念,为委派委派“assign”属性和“retain”。注意,两者在垃圾收集环境中是相同的。我主要关心一个非基于GC的环境(例如:iPhone)。

直接从Scott的博客:

“assign关键字将生成一个setter,它将值直接赋给实例变量,而不是复制或保留它。这对于像NSInteger和CGfloat这样的原始类型或者你不直接拥有的对象(如delegate)是最好的。

它是什么意思,你不直接拥有委​​托对象?我通常保留我的代表,因为如果我不想让他们走进深渊,保留将为我照顾。我通常抽象UItableVIEwController远离其各自的dataSource和委托也。我也保留那个特定的对象。我想确保它永远不会消失,所以我的UItableVIEw总是有它的委托。

有人可以进一步解释在哪里/为什么我错了,所以我可以理解这个常见的范例在Objective-C 2.0编程使用assign属性代理而不是retain?

谢谢!

解决方法 避免保留代理的原因是您需要避免保留周期:

A创建B.
A将自身设置为B的委托
… …
A由其所有者发布

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

你不应该担心A会离开,因为它拥有B,因此在dealloc中去掉它。

总结

以上是内存溢出为你收集整理的为什么Objective-C委托通常给予属性assign而不是retain?全部内容,希望文章能够帮你解决为什么Objective-C委托通常给予属性assign而不是retain?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1050612.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存