gpt4 book ai didi

ios - 为什么 UIViewController 的 'view' 属性在 Swift 中不是可选的?

转载 作者:搜寻专家 更新时间:2023-10-30 22:15:33 26 4
gpt4 key购买 nike

我注意到 UIViewControllerview 属性不是 UIView? 类型,而是 UIView 类型(即不是可选的)。这是为什么? UIViewController 的 View 在尚未加载时不应该是 nil 吗?

官方文档说明如下:

The view stored in this property represents the root view for the view controller's view hierarchy. The default value of this property is nil. .... The UIViewController class can automatically set this property to nil during low-memory conditions and also when the view controller itself is finally released.

根据我对 Swift 可选值的理解,似乎 view 应该声明为 var view: UIView? 因为它可能是 nil一些点。 Apple 的说法似乎恰恰相反,你能解释一下我的原因吗?

你怎么看?

最佳答案

看起来 view 是一个惰性属性(但没有使用 lazy 修饰符)——事实上,如果您阅读内联注释(cmd+单击 view 属性打开源代码)它说:

The getter first invokes [self loadView] if the view hasn't been set yet. Subclasses must call super if they override the setter or getter.

关于loadView():

This is where subclasses should create their custom view hierarchy if they aren't using a nib. Should never be called directly.

我认为:

  • 如果没有以其他方式实例化,则标准实现会创建一个空 View
  • 它由一个可选变量支持(不可公开访问)
  • 在内存不足的情况下,支持变量设置为 nil,释放 View 实例
  • 如果您在支持变量为 nil 时尝试访问该属性,它会创建一个新实例

所以它的实现在概念上应该类似于:

private var _view: UIView?

var view: UIView {
if _view == nil {
loadView()
}
return _view!
}

func loadView() {
if _view == nil {
// _view = something()
}
}

关于ios - 为什么 UIViewController 的 'view' 属性在 Swift 中不是可选的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25909446/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com