14

维基百科指出“在计算机编程中,弱引用是一种不保护被引用对象不被垃圾收集器收集的引用”。这两种类型的引用在代码中看起来如何?弱引用是否是自动发布消息的引用?

4

2 回答 2

16

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

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

您需要使用这些弱引用来分解循环。一个常见的情况是需要引用其父对象的子对象。在这种情况下,父对象将保留对子对象的引用,子对象具有对其父对象的引用,但不保留它。这是有效的,因为子对象只需要与父对象一样存在。

弱引用是否是自动发布消息的引用?

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

当调用堆栈展开时(例如在每个事件循环结束时),自动释放的东西就会消失。如果您需要减少临时性的任何内容,则需要保留参考(或者像上述情况一样,确保其他部分充分保留它)。

于 2011-09-05T10:24:55.817 回答
6

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

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

UITableViewDelegate, UIScrollViewDelegate, 等是弱引用的例子。

强参考示例:

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

Myclass *obj2 = obj1;

这里obj2有强烈的参考obj1意思是如果你obj2从内存中删除然后obj1也会被删除。

于 2011-09-05T10:27:50.073 回答