视图引用成员变量和局部变量的区别
difference between view reference to member variable and local variable
假设我有一个 activity,它包含一个 TextView。我可以将 TextView 初始化为成员变量或局部变量。这些与初始化之间在内存方面有什么区别吗?
示例:
Activity 本地视图引用:
public class MainActivity extends Activity{
@OVerride
public void onCreate(Bundle b){
TextView textView = (TextView)findViewById(R.id.my_text_view_id);
}
}
Activity 成员视图引用:
public class MainActivity extends Activity{
TextView mTextView;
@OVerride
public void onCreate(Bundle b){
mTextView = (TextView)findViewById(R.id.my_text_view_id);
}
}
Generally, try to avoid using 'global' variables unless you have good
reason to do .
您可以根据需要使用局部变量或全局变量。
主要是,local variables
是它们在有限的范围内工作,这意味着它们在调用函数时声明,并且在函数结束后 内存被变量占用的被释放。
最终使用全局变量导致内存浪费。
内存明智的全局变量更容易发生内存泄漏。任何变量的作用域都取决于它的作用域。对于局部变量,作用域是相关方法的右大括号,执行完右大括号后变量会自动被垃圾回收。全局变量将驻留在内存中,直到 class 的任何对象都在内存中。
您应该始终使用 最小 范围。所以当你声明一个变量时你应该问问自己:
"我以后在不同的函数中需要这个变量吗?"
是 -> 使用成员变量
否 -> 使用局部变量
编辑:
还要考虑对象创建的成本:
如果函数确实被重复调用,最好只实例化一个对象一次,将其存储为成员变量并重用它,而不是每次调用函数时都创建一个新实例。
所以第二个重要的问题是:
"这个函数会被调用很多吗?我真的需要一个存储在变量中的对象的新实例吗?"
是的,经常,但不,我可以重用同一个对象 -> 使用成员变量。这样可以使用相同的内存并且不会堆积垃圾。仅用于大型数组或对象,循环中的简单 int 变量不需要它。
假设我有一个 activity,它包含一个 TextView。我可以将 TextView 初始化为成员变量或局部变量。这些与初始化之间在内存方面有什么区别吗?
示例: Activity 本地视图引用:
public class MainActivity extends Activity{
@OVerride
public void onCreate(Bundle b){
TextView textView = (TextView)findViewById(R.id.my_text_view_id);
}
}
Activity 成员视图引用:
public class MainActivity extends Activity{
TextView mTextView;
@OVerride
public void onCreate(Bundle b){
mTextView = (TextView)findViewById(R.id.my_text_view_id);
}
}
Generally, try to avoid using 'global' variables unless you have good reason to do .
您可以根据需要使用局部变量或全局变量。
主要是,local variables
是它们在有限的范围内工作,这意味着它们在调用函数时声明,并且在函数结束后 内存被变量占用的被释放。
最终使用全局变量导致内存浪费。
内存明智的全局变量更容易发生内存泄漏。任何变量的作用域都取决于它的作用域。对于局部变量,作用域是相关方法的右大括号,执行完右大括号后变量会自动被垃圾回收。全局变量将驻留在内存中,直到 class 的任何对象都在内存中。
您应该始终使用 最小 范围。所以当你声明一个变量时你应该问问自己:
"我以后在不同的函数中需要这个变量吗?"
是 -> 使用成员变量
否 -> 使用局部变量
编辑:
还要考虑对象创建的成本:
如果函数确实被重复调用,最好只实例化一个对象一次,将其存储为成员变量并重用它,而不是每次调用函数时都创建一个新实例。
所以第二个重要的问题是:
"这个函数会被调用很多吗?我真的需要一个存储在变量中的对象的新实例吗?"
是的,经常,但不,我可以重用同一个对象 -> 使用成员变量。这样可以使用相同的内存并且不会堆积垃圾。仅用于大型数组或对象,循环中的简单 int 变量不需要它。