何时在ios 5中使用强弱参考

时间:2012-07-20 14:04:43

标签: iphone memory-management

  

可能重复:
  Weak and strong property setter attributes in Objective-C

我是iphone开发的新手。任何人都可以告诉我什么时候使用强,什么时候使用弱参考,以及原子和非原子之间有什么区别。我经历了很多链接,但我仍然不清楚它。  我还想知道在ios5之前使用的保留,复制和分配之间的差异。

感谢任何帮助..

谢谢, 拉吉

1 个答案:

答案 0 :(得分:13)

在设计数据时,您需要了解所有权的概念。数据拥有向下。所有权永远不会回溯到您的数据层次结构。如果A有一个指针指向B,而B指向C,那么C拥有A,你有一个循环参考图,由于A间接引用C而C引用A,导致内存泄漏A.发布A并且它没有得到因为C仍然有引用而被删除,除非A做了 - 否则它将不会被删除。

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

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

最后,当您通过在对象上调用[myObject retain]将对象分配给它时,retain属性会增加对象的引用计数。复制调用[myObject copy],使属性不引用原始属性,但复制和赋值只是一个没有引用计数调整的直接赋值。