kotlinAndroid控件使用篇Android专题

Kotlin-延迟初始化lateinit、by lazy{} 官

2021-04-06  本文已影响0人  千夜零一

根据官方文档翻译:

总结:

(1)作用的对象不一样

lateinit只能作用于被var关键字修饰的变量(并且这个值);而by lazy{ }只能作用于被val 关键字修饰的变量。

(2)初始化时间

lateinit修饰的变量需要由开发者自己决定初始化的时间、位置,并且同一个类的不同对象可以对这个变量进行多次的初始化;而by lazy{ }修饰的变量在声明的时候就需要在lazy{ }代码块中制定延迟初始化的行为,并且在该属性被第一次使用的时候自动完成初始化。

(3)线程安全方面

lateinit默认是不保证线程安全的,它的情况完全取决于使用者的代码;而by lazy{ }的初始化默认线程安全,并且保证代码块中的代码最多被调用一次。

(4)内存泄露问题

by lazy{ }中的lambda表达式可能会含有上下文的引用,引用会一直被持有直到变量被初始化。因此这样可能会导致内存泄漏。

(5)值是否为null

lateinit如果未进行初始化的赋值操作,为null值;而lazy实例是有值的,只要使用就一定非空(一经使用就立即完成初始化操作)。

上一篇下一篇

猜你喜欢

热点阅读