维基百科声明“在计算机编程中,弱引用是一种不能保护引用对象不被垃圾收集器收集的引用”。这两种类型的引用在代码中是什么样的?弱引用是否是自动释放消息的引用?
答案 0 :(得分:16)
以下答案适用于没有垃圾回收的情况(例如在iOS上)。
在垃圾收集的情况下,实际上有一个关键字(__weak
)来创建一个弱引用。
“弱”引用是您不保留的引用。
您需要使用这些弱引用来分解周期。常见的情况是需要对其父对象的引用的子对象。在这种情况下,父对象将保留对子对象的引用,并且子对象具有对其父对象的引用,但不保留它。这是有效的,因为只要父对象执行,子对象才需要存在。
弱引用是否是自动释放消息的引用?
不是真的,那将是一个“非常弱的参考”; - )
当调用堆栈被解除时(例如,在每个事件循环结束时),自动释放的东西消失了。如果你需要任何不那么临时的东西,你需要保留一个参考(或者像上面的情况一样,确保其他部分保留足够的参考)。
答案 1 :(得分:6)
弱引用是一个强度不足以强制对象保留在内存中的引用,而强引用会强制对象保留在内存中。
如果你已经创建了对任何变量的弱引用,那么你可能会得到nil。
UITableViewDelegate
,UIScrollViewDelegate
等是弱引用的示例。
强参考示例:
MyClass *obj1 = [[Myclass alloc] init];
Myclass *obj2 = obj1;
此处obj2
强烈引用obj1
表示如果从内存中删除obj2
,则obj1
也会被删除。