如何在objective-c中看弱和强引用?

时间:2011-09-05 10:14:03

标签: iphone objective-c weak-references strong-references

维基百科声明“在计算机编程中,弱引用是一种不能保护引用对象不被垃圾收集器收集的引用”。这两种类型的引用在代码中是什么样的?弱引用是否是自动释放消息的引用?

2 个答案:

答案 0 :(得分:16)

以下答案适用于没有垃圾回收的情况(例如在iOS上)。 在垃圾收集的情况下,实际上有一个关键字(__weak)来创建一个弱引用。

“弱”引用是您不保留的引用。

您需要使用这些弱引用来分解周期。常见的情况是需要对其父对象的引用的子对象。在这种情况下,父对象将保留对子对象的引用,并且子对象具有对其父对象的引用,但不保留它。这是有效的,因为只要父对象执行,子对象才需要存在。

  

弱引用是否是自动释放消息的引用?

不是真的,那将是一个“非常弱的参考”; - )

当调用堆栈被解除时(例如,在每个事件循环结束时),自动释放的东西消失了。如果你需要任何不那么临时的东西,你需要保留一个参考(或者像上面的情况一样,确保其他部分保留足够的参考)。

答案 1 :(得分:6)

弱引用是一个强度不足以强制对象保留在内存中的引用,而强引用会强制对象保留在内存中。

如果你已经创建了对任何变量的弱引用,那么你可能会得到nil。

UITableViewDelegateUIScrollViewDelegate等是弱引用的示例。

强参考示例:

MyClass *obj1 = [[Myclass alloc] init];

Myclass *obj2 = obj1;

此处obj2强烈引用obj1表示如果从内存中删除obj2,则obj1也会被删除。

相关问题