亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

iOS?Swift?Lazy?var?View失效問(wèn)題解決

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

lazy var使用失效

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

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

原因分析

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

在viewDidLoad()前不要訪問(wèn)里面的View,否則會(huì)導(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 // 提前訪問(wèn)
    }
    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失效問(wèn)題解決的詳細(xì)內(nèi)容,更多關(guān)于iOS Swift Lazy var View失效的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論