当前位置: 代码网 > it编程>App开发>苹果IOS > iOS Swift Lazy var View失效问题解决

iOS Swift Lazy var View失效问题解决

2024年05月15日 苹果IOS 我要评论
lazy var使用失效一般来说,在uiviewcontroller里的uiview使用lazy var,可以确保在只第一次使用时创建。但是如果在viewdidload()前访问这个view,那么这个

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失效的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com