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

问题描述 投票:0回答:1

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

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

或者它应该始终存储在链接下的weakReference中?

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) {
}
kotlin weak-references
1个回答
1
投票

简短的回答是肯定的,只要你的一个类拥有对象的引用,它就不会被释放。 否则,你的OtherClass会遇到意想不到的行为。

© www.soinside.com 2019 - 2024. All rights reserved.