为了打破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) {
}
简短的回答是肯定的,只要你的一个类拥有对象的引用,它就不会被释放。
否则,你的OtherClass
会遇到意想不到的行为。