弱 IBOutlet UIView 属性会变成 nil。

5
我在nib文件中有两个UIView,并将它们设置为视图控制器的属性,使用了IBOutletweak关键字。但是,当我使用self.view1指向nib中的视图时,第一次可以正常工作。但之后使用时,这两个属性变成了nil
使用strong属性可以解决此问题。但我通常对IBOutlet属性使用weak。为什么在这种情况下它会变成nil

4
如果一个弱引用没有被引用,它将变成nil。这种情况可能发生在没有superview的视图上。 - rmaddy
但是当我稍后使用它时,这两个属性变成了nil - 意思是,你如何处理它..? - Kumar KL
@rmaddy,你真的让我想起了什么。 - Gon
@KumarKl 我执行了 removeFromSuperview 操作,当我想将它们重新添加回去时,发现它们的值为 nil。 - Gon
1个回答

8
你需要在nib文件中对顶层项使用强引用(strong reference)。如果你的nib文件有两个视图作为顶层视图,那么你应该对它们使用强引用(strong reference),而不是使用弱引用(weak reference)

这些顶层视图的任何子视图都可以使用弱引用(weak reference)作为IBOutlets,因为顶层视图会对这些子视图保持强引用(strong reference),所以你不需要再额外保持强引用。

大多数情况下,弱引用(weak reference)已经足够了,因为顶层对象会有一个隐式的强引用(strong reference)。例如,如果你有一个视图控制器的nib文件,那么视图控制器对象会因为其view属性而对顶层视图保持强引用(strong reference),这意味着你可以将其他对象的引用设置为弱引用(weak reference)


1
就像你所说的那样,我执行了一些操作,例如removeFromSuperview,之后弱引用属性变成了nil。感谢@rmaddy,当我看到他的评论时,我意识到了我的错误所在。 - Gon

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