为了破坏圆圈引用,在一个地方将一个实体实例传递给一个类,该类将其保持在弱引用中。 但是第二个类也将从弱引用中取消引用的实例传递给其他类,并且该类只是将其存储为普通引用。
从弱引用中取消引用的实例是否会阻止 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
将遇到意外行为。