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

Cen*_*ion 14 iphone weak-references objective-c strong-references

维基百科指出"在计算机编程中,弱引用是一种不能保护引用对象免受垃圾收集器收集的引用".这两种类型的引用在代码中是什么样的?弱引用是否是由自动释放的消息引用的?

Thi*_*ilo 16

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

"弱"引用是您不保留的引用.

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

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

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

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


Hit*_*esh 6

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

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

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

强参考示例:

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

Myclass *obj2 = obj1;
Run Code Online (Sandbox Code Playgroud)

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