为何不直接创建UIView实例赋值给属性,而非使用隐式可选类型?
为什么在ViewController中先声明隐式可选UILabel再在loadView中初始化?
下面从实际开发的角度解释这种写法的原因:
避免不必要的内存开销
如果直接写var label = UILabel(),这个UILabel实例会在ViewController对象刚创建时就被初始化,但此时ViewController的view还没开始加载,这个label暂时没有任何用处,属于提前占用内存资源。而把初始化逻辑放在loadView里,是在view真正需要构建的时候才创建label,资源利用更高效。保证视图配置与层级的一致性
loadView是系统专门用来创建ViewController根视图的方法,在这里初始化label、设置文本、添加到view上,能让label的配置和视图层级构建完全同步。要是提前初始化label,后续还要在viewDidLoad等方法里再处理添加到view的逻辑,很容易出现顺序混乱——比如还没把label加到view上就去设置布局约束,或者不小心重复添加子视图。贴合iOS视图生命周期设计
ViewController的view是懒加载的,只有当代码访问到view属性时,系统才会触发loadView方法。把子视图初始化放在这个方法里,和系统的视图加载流程完全对齐,代码逻辑更清晰,也能避免因视图未加载就操作子视图带来的潜在问题。
另外补充一种更现代的替代写法——懒加载,同样能实现延迟初始化的效果,代码更简洁:
lazy var label: UILabel = { let label = UILabel() label.text = "Hello World" return label }()
使用懒加载时,label会在第一次被访问的时候才初始化,不用手动在loadView里赋值,适合大多数常规场景。
内容的提问来源于stack exchange,提问作者User95797654974
相关产品推荐
相关产品推荐

