![](/img/trans.png)
[英]Swift optional or Implicit property on UIViewController subclass
[英]Why is the 'view' property of UIViewController not optional in Swift?
我注意到UIViewController
的view
属性不是UIView?
类型的UIView?
但相反UIView
(即不是可选的)。 这是为什么? UIViewController的视图在未加载时应该是nil
吗?
官方文档说明如下:
存储在此属性中的视图表示视图控制器的视图层次结构的根视图。 此属性的默认值为nil。 ....在低内存条件下以及最终释放视图控制器本身时,UIViewController类可以自动将此属性设置为nil。
根据我对Swift选项的理解,似乎应该将view
声明为var view: UIView?
因为在某些时候它可能是nil
。 Apple似乎反过来说,你能解释一下我的原因吗?
你怎么看?
看起来view
是一个惰性属性(但不使用lazy
修饰符) - 实际上如果你读取内联注释(cmd +点击view属性来打开源代码),它会说:
如果尚未设置视图,则getter首先调用[self loadView]。 如果子类覆盖了setter或getter,则必须调用super。
和关于loadView()
:
这是子类在不使用nib时应创建自定义视图层次结构的位置。 永远不应该直接打电话。
我认为:
所以它的实现应该在概念上类似于:
private var _view: UIView?
var view: UIView {
if _view == nil {
loadView()
}
return _view!
}
func loadView() {
if _view == nil {
// _view = something()
}
}
该物业在技术上不是零。 它在第一次访问属性时初始化视图。 它被称为延迟加载 。 这意味着,当您访问该房产时,您将获得一个价值。 我认为这个属性的文档有误导性甚至不正确。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.