iOS Swift Lazy var View失效问题解决

Bena ·
更新时间:2024-11-01
· 1584 次阅读

目录

lazy var使用失效

原因分析

lazy var使用失效

一般来说,在UIViewController里的UIView使用lazy var,可以确保在只第一次使用时创建。

但是如果在viewDidLoad()前访问这个View,那么这个View就会创建两次,说明Lazy var机制失效了。网上搜了一下,都是说Lazy var在多线程下会失效。然而我打印一下日志,两次创建都是在主线程。

原因分析

原因我猜测是UIViewController的创建采用了某种线程加速方法, 导致里面的方法有一些错乱?

在viewDidLoad()前不要访问里面的View,否则会导致莫名其妙难以排查的bug!

class NoSafeVC: UIViewController { lazy var myView: UIView = { let view = UIView(frame: view.bounds) print("create myView \(view) \(Thread.current)") return view }() init() { super.init(nibName: nil, bundle: nil) _ = myView // 提前访问 } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .gray view.addSubview(myView) } } create myView <UIView: 0x104b19730; frame = (0 0; 375 667); layer = <CALayer: 0x280fd1f40>> <NSThread: 0x281ae08c0>{number = 1, name = main} create myView <UIView: 0x104b198a0; frame = (0 0; 375 667); layer = <CALayer: 0x280fd1fc0>> <NSThread: 0x281ae08c0>{number = 1, name = main}

以上就是iOS Swift Lazy var View失效问题解决的详细内容,更多关于iOS Swift Lazy var View失效的资料请关注软件开发网其它相关文章!



Swift view IOS var

需要 登录 后方可回复, 如果你还没有账号请 注册新账号