Ios IBO是强是弱——它真的对内存管理有影响吗?(ARC)

Ios IBO是强是弱——它真的对内存管理有影响吗?(ARC),ios,objective-c,memory-management,ios7,iboutlet,Ios,Objective C,Memory Management,Ios7,Iboutlet,我最近在这里和其他网站上读了很多关于IBOutlets应该是强还是弱的文章。官方的结论是,它们应该是弱的,除非它们引用顶级xib对象 这很好 然而,我还不清楚的是,为什么将它们设置为“强”或“弱”实际上会对应用程序的内存管理产生影响。特别是从iOS6开始,viewDidUnload似乎不再在收到内存警告时被调用,因此从这个意义上讲,IBOutlets选择弱还是强没有什么区别 我是否正确地认为,对于不再位于导航堆栈上的视图控制器(即,在加载后弹出),任何声明为弱的IBOutlets都将被释放 谢谢

我最近在这里和其他网站上读了很多关于IBOutlets应该是强还是弱的文章。官方的结论是,它们应该是弱的,除非它们引用顶级xib对象

这很好

然而,我还不清楚的是,为什么将它们设置为“强”或“弱”实际上会对应用程序的内存管理产生影响。特别是从iOS6开始,viewDidUnload似乎不再在收到内存警告时被调用,因此从这个意义上讲,IBOutlets选择弱还是强没有什么区别

我是否正确地认为,对于不再位于导航堆栈上的视图控制器(即,在加载后弹出),任何声明为弱的IBOutlets都将被释放


谢谢你的见解

IBOutlets可以声明为弱,因为它们将在XIB解析期间创建并添加到UIView堆栈中……因此您不需要对对象的强引用


当您声明IBOutlet弱时,您可以确保当UIViewcontroller的主UIView消失时,每个子视图都将被删除,而不会出现任何内存泄漏。

您可能已经注意到,当您直接从Interface Builder插入IBOutlet时,您可以选择将其作为弱属性还是强属性。在Apple developer's library中搜索了一下后,我发现您应该何时使用其中一种:

输出通常应该是弱的,除了从文件所有者到nib文件(或者,在iOS中,是情节提要场景)中的顶级对象的输出应该是强的。因此,您创建的插座通常应较弱,因为:

例如,为视图控制器的视图或窗口控制器的窗口的子视图创建的出口是对象之间的任意引用,并不意味着所有权。 强输出通常由框架类指定(例如,UIViewController的视图输出或NSWindowController的窗口输出)


通常,如果插座已经有一个静态的
超级视图
,您可以保持插座的
(这样可以保持视图处于活动状态,直到它们成为视图层次结构的一部分,并且不会导致强保留周期),如果在任何
视图中添加或删除任何视图,则
strong
引用最好确保该视图保持活动状态,直到您希望最终释放它。这就是我感兴趣的-因此将其设置为“弱”将允许在拥有的视图不再存在时删除子视图?是的,因为只有(强)视图代码中的引用在他的superview上。