3

假设我有一个活动,它包含一个 TextView。我可以将 TextView 初始化为成员变量或局部变量。这些与初始化之间有什么记忆方面的区别吗?

示例: 具有本地视图参考的活动:

 public class MainActivity extends Activity{

    @OVerride
    public void onCreate(Bundle b){
       TextView textView = (TextView)findViewById(R.id.my_text_view_id);
    }
}

活动与成员视图参考:

 public class MainActivity extends Activity{
    TextView mTextView;

    @OVerride
    public void onCreate(Bundle b){
       mTextView = (TextView)findViewById(R.id.my_text_view_id);
    }
}
4

3 回答 3

5

您应该始终使用最小范围。所以当你声明一个变量时,你应该问自己:

我以后在不同的函数中会需要这个变量吗?

-> 使用成员变量

-> 使用局部变量

编辑:

还需要考虑的是对象创建的成本:

如果一个函数确实被重复调用,最好只实例化一个对象一次,将其存储为成员变量并重用它,而不是每次调用函数时都创建一个新实例。

所以第二个重要的问题是:

这个函数会被大量调用吗?我真的需要一个存储在变量中的对象的新实例吗?

是的,经常,不,我可以重用相同的对象-> 使用成员变量。这样使用相同的内存并且没有垃圾堆积。仅用于大型数组或对象,循环中的简单 int var 不需要。

于 2016-02-03T08:34:25.313 回答
1

一般来说,尽量避免使用“全局”变量,除非你有充分的理由这样做。

您可以使用 Local 或 Global Variable 取决于您的 Requirement 。

主要local variables是,它们是否在有限范围内工作意味着它们在调用函数时声明,并且在结束函数后释放变量占用的内存。

最后使用全局变量会导致内存浪费。

于 2016-02-03T08:07:12.443 回答
1

内存明智的全局变量更容易发生内存泄漏。任何变量的作用域取决于它的作用域。对于局部变量,作用域是相关方法的右大括号,在右大括号执行后,变量会自动被垃圾回收。全局变量将驻留在内存中,直到该类的任何对象都在内存中。

于 2016-02-03T08:15:09.850 回答