何时应该在IBOutlets中使用弱引用或强引用限定符?

4

可能是重复问题:
在ARC下,IBOutlets应该是强引用还是弱引用?

在文档中,我读到了这样的话: “Outlet 应该通常使用弱引用,除了从文件的所有者到一个nib文件(或在iOS中,storyboard场景)中的顶层对象的那些应该使用强引用。”

举个例子?我不明白什么时候使用“弱引用”而不是“强引用”属性对于 IBOutlet 更好。

1个回答

24

一般而言:如果你在将一个插座(outlet)连接到ViewController的子视图(subview)上时,它应该是弱引用(weak)。该对象仅存在于顶级视图(viewDidLoad和viewDidUnload之间)的存在期间。因为在iOS 5中使用了ARC自动将弱关联(nullifies weak links),当viewController卸载其视图并销毁视图层次结构时,你的插座将自动设置为nil。

但也许你想在nib文件中创建另一个对象(模型对象)。由于此对象不在视图层次结构下,你需要将iboutlet设为强引用(strong)。如果你将其链接为弱引用,则该对象将被自动释放,因为没有其他对象有强引用指向它,ARC会释放它并将nil设置给你的IBOutlet。然而Subview不是这种情况,因为它的Superview保持与它的强关联。


1
这个“nib文件中的另一个对象”中的子视图怎么样?它们是弱引用还是强引用? - Van Du Tran
1
弱引用指向的对象容易被垃圾回收,因为它们的父视图对它们保持了强引用。 - javieralog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接