我使用Android术语用例子撰写这个问题,但我认为它对于所有面向对象的编程都是一样的。
如果有两个名称为FragmentA
和FragmentB
的片段(类)以及名称为Interface1
的接口
FragmentA
实现了接口'Interface1'。
FragmentA
创建FragmentB
的对象并将其存储为强引用实例变量。
FragmentA
也会将this
(Interface1
的实现)传递给FragmentB
的构造函数,作为对象创建的一部分。
FragmentB
将Interface1
实现对象(在本例中为FragmentA
的对象)存储为名为mInterface1Obj
的强引用实例变量。
1- mInterface1Obj
的{{1}}是否强烈引用FragmentB
个对象?
2-在这种情况下是否发生内存泄漏?
3- FragmentA
应该是弱引用(mInterface1Obj
而不是WeakReference<Interface1> mInterface1Obj
)以避免内存泄漏吗?
答案 0 :(得分:-3)
FragmentB的mInterface1Obj是否拥有对FragmentA对象的强引用?
是。直到并且除非你在WeakReference对象中保留引用,直到它始终保持强引用。
在这种情况下是否会发生内存泄漏?
例如,在你的片段堆栈中,如果从堆栈中删除Fragment1并且Fragment2将保留在堆栈中,则会发生内存泄漏,因为Fragment2持有Fragment1的强引用。
mInterface1Obj应该是弱引用(WeakReference mInterface1Obj而不是Interface1 mInterface1Obj)以避免内存泄漏吗?
这是正确的方法。