iOS Swift Lazy var 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失效的资料请关注脚本之家其它相关文章!
相关文章
详解iOS App中UISwitch开关组件的基本创建及使用方法
UISwitch组件就是我们平时在iOS设置菜单中开到的那种左右滑动的开关按钮,当然我们在开发时可以进行更多的自定义,这里我们就来详解iOS App中UISwitch开关组件的基本创建及使用方法2016-05-05iOS swift 总结NavigationController出现问题及解决方法
这篇文章主要介绍了iOS swift 总结NavigationController出现问题及解决方法的相关资料,需要的朋友可以参考下2016-12-12iOS自定义UITableView实现不同系统下的左滑删除功能详解
关于左滑删除这块,相信不少朋友都遇到过。下面这篇文章主要给大家介绍了关于iOS如何自定义UITableView实现不同系统下的左滑删除功能的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下2018-09-09
最新评论