在iOS 5中什么时候使用强引用和弱引用?

3

可能是重复的问题:
Objective-C中的弱引用和强引用属性设置器

我刚开始学习iPhone开发。有人能告诉我什么时候使用强引用和弱引用,以及原子和非原子之间的区别吗?我看了很多链接,但仍然不清楚。 我也想知道在iOS5之前使用的retain、copy和assign之间的区别。

任何帮助都将不胜感激。

谢谢, Raj

1个回答

13
设计数据时需要了解所有权的概念。数据向下拥有,所有权永远不会返回到数据层次结构中。如果A指向B,B指向C,则C拥有A,您将得到一个循环引用图,由于A间接引用C并且C引用A,因此会导致内存泄漏。释放A并不会删除它,因为C仍然有一个引用,除非A执行删除操作,否则它不会被删除-这是一个进退两难的局面。
为避免出现这种情况,使用强指针指向“向下”您的数据,并使用弱指针进行任何反向引用(例如,父指针)。
如果属性是原子属性,它会生成一个setter,允许从多个线程中设置它。您不能在一个线程更改属性的同时发生竞争条件。非原子属性没有该线程锁定系统。
最后,保留属性在将其分配给对象时通过在对象上调用[myObject retain]来增加该对象的引用计数。复制调用[myObject copy],因此该属性不引用原始内容,而是引用副本,而赋值只是一个简单的赋值操作,没有引用计数调整。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接