Ios 弱IBUIView属性将变为零

Ios 弱IBUIView属性将变为零,ios,properties,weak-references,iboutlet,Ios,Properties,Weak References,Iboutlet,nib文件中有两个UIView,我使用IBOutlet和weak关键字将它们设置为视图控制器的属性 然而,当我使用self.view1指向nib中的视图时,它第一次起作用。但当我稍后使用它时,这两个属性变成了nil 使用strong属性可以解决此问题。但是我总是对IBOutlet属性使用weak。为什么在这种情况下变为零?您需要对nib文件中的顶级项进行strong引用。如果在nib的顶层有两个视图,那么应该有对它们的strong引用,而不是弱引用 这些顶级视图的任何子视图都可以使用弱引用创建I

nib文件中有两个UIView,我使用
IBOutlet
weak
关键字将它们设置为视图控制器的属性

然而,当我使用
self.view1
指向nib中的视图时,它第一次起作用。但当我稍后使用它时,这两个属性变成了
nil


使用
strong
属性可以解决此问题。但是我总是对
IBOutlet
属性使用
weak
。为什么在这种情况下变为零?

您需要对nib文件中的顶级项进行
strong
引用。如果在nib的顶层有两个视图,那么应该有对它们的
strong
引用,而不是
引用

这些顶级视图的任何子视图都可以使用
弱引用创建
IBOutlets
,因为顶级视图保留对这些子视图的强引用,所以您不必这样做


大多数情况下,
就足够了,因为有一个对顶级对象的隐式
引用。例如,如果您有视图控制器的nib,则视图控制器对象将保持对顶层视图的强引用,因为它是
view
属性,这意味着您可以对任何其他对象使用
保持。

如果没有对它的引用,则弱出口将变为
nil
。这可能发生在没有
超级视图的视图上。但是当我以后使用它时,这两个属性变成了零-意思是,你是如何处理它的?@rmaddy你真的提醒了我。@KumarKl我确实从超级视图中删除了
,当我想重新添加它们时,发现它们是零。正如你所说的。我做了一些操作,比如
removeFromSuperview
,之后弱属性变为零。感谢@rmaddy,当我看到他的评论时,我意识到我的错误在哪里。