【发布时间】:2018-10-03 15:45:12
【问题描述】:
如您所知,java 中的每个匿名对象都包含对封闭类的隐藏引用。
但是随着 kotling,事情变得更加复杂。
Lambda 是匿名类的另一种表示,但在 kotlin 中它的编译并不简单,因为如果 lambda 没有显式捕获封闭类的引用,那么它将像嵌套而不是内部类(匿名类)那样编译并且是安全的从泄漏。
但是内联函数呢?考虑下面的代码
class A {
fun test(){
val it = withReference {
//todo make sth
}
}
}
inline fun withReference(crossinline action: () -> Unit) = object: Reference {
override fun method1() {
action()
}
override fun method2() {
}
}
interface Reference {
fun method1()
fun method2()
}
据我所知,内联函数会像未包装的代码一样编译到 A 类,所以问题是开放的。
匿名object: Reference 是否包含指向封闭类A 的链接,这可能导致内存泄漏?
PS:我已阅读 this article,但它不包含我的案例的答案
【问题讨论】:
标签: memory-leaks kotlin