我最近在这里和其他网站上一直在阅读有关IBOutlets是强还是弱的内容。官方判决是它们应该是弱的,除非它们引用顶级xib对象。
这很好。
然而,我还没有清楚地了解为什么将它们设置为强或弱实际上会对应用程序的内存管理产生影响。特别是从iOS6开始,viewDidUnload在接收内存警告时不再被调用,因此从这个意义上来说,IBOutlets选择弱或强无效。
我是否正确地认为,对于视图控制器不再在导航堆栈上(即在它们被加载然后弹出之后),任何宣布为弱的IBOutlet将被释放?
感谢您的任何见解!
答案 0 :(得分:2)
您可能已经注意到,当您直接从Interface Builder插入IBOutlet时,您可以选择是将其作为弱属性还是强属性。在Apple开发人员库中进行了一些搜索之后,我发现你何时应该使用其中一个:
Outlets通常应该很弱,除了从文件所有者到nib文件中的顶级对象(或者在iOS中,故事板场景中)应该很强的那些。因此,您创建的插座通常应该很弱,因为:
例如,您创建到视图控制器视图或窗口控制器窗口的子视图的出口是不暗示所有权的对象之间的任意引用。 强大的出口通常由框架类指定(例如,UIViewController的视图出口,或NSWindowController的窗口出口)。
答案 1 :(得分:1)
IBOutlets可以声明为弱,因为它们将在XIB解析期间创建并添加到UIView堆栈中......因此您不需要对该对象的强引用。
当你声明一个IBOutlet弱时,你要确保当UIViewcontroller的主UIView消失时,每个子视图都会被删除而没有任何内存泄漏。