可能重复:
Weak and strong property setter attributes in Objective-C
我是iphone开发的新手。任何人都可以告诉我什么时候使用强,什么时候使用弱参考,以及原子和非原子之间有什么区别。我经历了很多链接,但我仍然不清楚它。 我还想知道在ios5之前使用的保留,复制和分配之间的差异。
感谢任何帮助..
谢谢, 拉吉
答案 0 :(得分:13)
在设计数据时,您需要了解所有权的概念。数据拥有向下。所有权永远不会回溯到您的数据层次结构。如果A有一个指针指向B,而B指向C,那么C拥有A,你有一个循环参考图,由于A间接引用C而C引用A,导致内存泄漏A.发布A并且它没有得到因为C仍然有引用而被删除,除非A做了 - 否则它将不会被删除。
为了避免这种情况,你使用强指针指向“向下”你的数据,并使用弱指针进行任何反向引用(例如父指针)。
如果属性是原子属性,它会生成一个允许从多个线程设置的setter。您不能拥有一个线程同时更改另一个属性的竞争条件。非原子属性没有该线程锁定系统。
最后,当您通过在对象上调用[myObject retain]将对象分配给它时,retain属性会增加对象的引用计数。复制调用[myObject copy],使属性不引用原始属性,但复制和赋值只是一个没有引用计数调整的直接赋值。