是否可以将从弱引用获取的实体实例传递给其他类实例并存储在那里?



为了破坏圆圈引用,在一个地方将一个实体实例传递给一个类,该类将其保持在弱引用中。 但是第二个类也将从弱引用中取消引用的实例传递给其他类,并且该类只是将其存储为普通引用。

从弱引用中取消引用的实例是否会阻止 GC 以释放该实例?

或者它应该始终存储在链条下方的弱参考中?

class sample (listner: Listener) {
var listener: WeakReference<Listener> = WeakReference(listener)
lateinit var otherClass
init{
// now passing the solid listener to other class
otherClass: OtherClass = OtherClass(getListener())
}
fun getListener() {
return listener.get()
}

OtherClass 将实例存储为普通引用:

class OtherClass(var listener: Listener) {
}

简短的回答是肯定的,只要您的一个类包含对对象的引用,它就不会被释放。
否则,您的OtherClass将遇到意外行为。

相关内容

最新更新