View 拥有强大的引用吗?

stu*_*ped 1 iphone weak-references view objective-c strong-references

快速问题:我ViewControllerIBOutletfor aUILabelViewController's view自动保留对标签的强引用吗?而且,如果我以编程方式创建一个UIPopoverController ivarinViewControllerUIPopoverController ivar以编程方式将其放在屏幕上,也会ViewController's view自动保留对此的强引用吗?

jha*_*ott 5

您应该对不属于视图层次结构的任何视图保留强引用。您的视图控制器已经对其view属性(主视图)具有强引用,并且所有子视图都将由其超级视图保留,因此您实际上不需要对它们持有强引用,您可以对这些视图持有弱引用。

但是,如果您有任何不在主视图中的视图(例如,在 .xib 文件中定义的附加视图,您稍后可能会添加到主视图中,或者您想要删除的子视图之一)并以编程方式重新添加)那么您应该对这些视图进行强有力的引用。

另请注意,当您在视图控制器中持有对视图的强引用时,您应该进行设置,self.strongViewRef = nil因为viewDidUnload在卸载视图时不需要它(例如,当视图控制器位于后台时,例如被另一个完整的视图遮挡) - 屏幕视图)。当再次加载视图时,该属性将自动重新设置为该视图的新实例。

关于弹出窗口,它会在呈现时被保留(window我认为),但我建议在需要时保留对它的强引用,然后在nil完成后将该指针设置为。这样,您就可以保证在需要时可以访问它,在某些情况下,可能是在它出现之前或在它被关闭之后。