接口是强或弱参考?

时间:2017-05-17 03:21:39

标签: java android oop

我使用Android术语用例子撰写这个问题,但我认为它对于所有面向对象的编程都是一样的。

如果有两个名称为FragmentAFragmentB的片段(类)以及名称为Interface1的接口

FragmentA实现了接口'Interface1'。

FragmentA创建FragmentB的对象并将其存储为强引用实例变量。

FragmentA也会将thisInterface1的实现)传递给FragmentB的构造函数,作为对象创建的一部分。

FragmentBInterface1实现对象(在本例中为FragmentA的对象)存储为名为mInterface1Obj的强引用实例变量。

1- mInterface1Obj的{​​{1}}是否强烈引用FragmentB个对象?

2-在这种情况下是否发生内存泄漏?

3- FragmentA应该是弱引用(mInterface1Obj而不是WeakReference<Interface1> mInterface1Obj)以避免内存泄漏吗?

1 个答案:

答案 0 :(得分:-3)

  

FragmentB的mInterface1Obj是否拥有对FragmentA对象的强引用?

是。直到并且除非你在WeakReference对象中保留引用,直到它始终保持强引用。

  

在这种情况下是否会发生内存泄漏?

例如,在你的片段堆栈中,如果从堆栈中删除Fragment1并且Fragment2将保留在堆栈中,则会发生内存泄漏,因为Fragment2持有Fragment1的强引用。

  

mInterface1Obj应该是弱引用(WeakReference mInterface1Obj而不是Interface1 mInterface1Obj)以避免内存泄漏吗?

这是正确的方法。