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