欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS?Swift?Lazy?var?View失效問題解決

 更新時間:2023年07月05日 11:15:52   作者:rome753  
這篇文章主要為大家介紹了iOS?Swift?Lazy?var?View失效問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

lazy var使用失效

一般來說,在UIViewController里的UIView使用lazy var,可以確保在只第一次使用時創(chuàng)建。

但是如果在viewDidLoad()前訪問這個View,那么這個View就會創(chuàng)建兩次,說明Lazy var機制失效了。網(wǎng)上搜了一下,都是說Lazy var在多線程下會失效。然而我打印一下日志,兩次創(chuàng)建都是在主線程。

原因分析

原因我猜測是UIViewController的創(chuàng)建采用了某種線程加速方法, 導(dǎo)致里面的方法有一些錯亂?

在viewDidLoad()前不要訪問里面的View,否則會導(dǎo)致莫名其妙難以排查的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失效問題解決的詳細(xì)內(nèi)容,更多關(guān)于iOS Swift Lazy var View失效的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論