维基百科指出“在计算机编程中,弱引用是一种不保护被引用对象不被垃圾收集器收集的引用”。这两种类型的引用在代码中看起来如何?弱引用是否是自动发布消息的引用?
问问题
8441 次
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 回答