3

可能的重复:
Objective-C 中的弱和强属性设置器属性

我是 iphone 开发新手。谁能告诉我何时使用强引用以及何时使用弱引用以及原子和非原子之间的区别。我浏览了很多链接,但我仍然不清楚。我还想知道在 ios5 之前使用的保留、复制和分配之间的区别。

任何帮助表示赞赏..

谢谢,拉吉

4

1 回答 1

13

在设计数据时,您需要了解所有权的概念。数据向下拥有。所有权永远不会备份您的数据层次结构。如果A有一个指向B的指针,B指向C,那么C拥有A,你有一个循环引用图,由于A间接引用C和C引用A而导致内存泄漏。释放A并没有得到删除是因为 C 仍然有一个引用,除非 A 这样做,否则它不会被删除 - 一个 catch 22。

为了避免这样的情况,您使用强指针指向“向下”数据,并使用弱指针指向任何反向引用(例如父指针)。

如果一个属性是原子的,它会生成一个允许从多个线程设置它的设置器。您不能有一个线程同时更改另一个属性的竞争条件。非原子属性没有那个线程锁定系统。

最后,当您通过在对象上调用 [myObject retain] 将其分配给对象时,保留属性会增加对象的引用计数。Copy 调用 [myObject copy] 因此该属性不引用原始文件,但复制和分配只是直接分配,没有引用计数调整。

于 2012-07-20T14:39:20.980 回答