iphone - ios 5 中何时使用强引用和弱引用

标签 iphone memory-management

Possible Duplicate:
Weak and strong property setter attributes in Objective-C

我是 iPhone 开发新手。任何人都可以告诉我何时使用强引用,何时使用弱引用,以及原子引用和非原子引用之间的区别是什么。我浏览了很多链接,但仍然不清楚。 我还想知道ios5之前使用的retain、copy和assign之间的区别。

感谢任何帮助..

谢谢, 拉杰

最佳答案

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

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

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

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

关于iphone - ios 5 中何时使用强引用和弱引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11580993/

相关文章:

iphone - 除法结果不正确

c# - 使用 foreach 循环解析大型文本文件的奇怪行为 (C# .NET 4)

java - Java 中的内存管理

c++ - 对使用多个内存池的类使用工厂是否合适?有更好的模式/技术吗?

iphone - SKPaymentQueue restoreCompletedTransactions 多次恢复同一交易

iphone - iPhone OS 上 OpenGL ES 的首选顶点数据格式是什么?

iphone - 当用户点击 iPhone 键盘上的“发送”按钮时,如何执行选择器?

c++ - 推力 : Accessing a device variable created with cudaMallocPitch

java - 在实例创建或使用 new 关键字创建对象期间何时分配内存?

iphone - 单击输入按钮或搜索按钮时隐藏键盘