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

常に最小限のスコープを使用する必要があります。したがって、変数を宣言するときは、次のことを自問する必要があります。

後で別の関数でこの変数が必要になりますか?

はい-> メンバー変数を使用

いいえ-> ローカル変数を使用します

編集:

オブジェクト作成のコストも考慮する必要があります。

関数が繰り返し呼び出される場合は、関数が呼び出されるたびに新しいインスタンスを作成するのではなく、オブジェクトを 1 回だけインスタンス化し、メンバー変数として格納して再利用することをお勧めします。

したがって、2 番目の重要な質問は次のとおりです。

この関数は頻繁に呼び出されますか? また、変数に格納されたオブジェクトの新しいインスタンスが本当に必要ですか?

はい、しばしば、いいえ、同じオブジェクトを再利用できます->メンバー変数を使用します。このようにして、同じメモリが使用され、ゴミが積み上げられることはありません。大きな配列またはオブジェクトにのみ使用してください。ループ内の単純な int 変数には必要ありません。

于 2016-02-03T08:34:25.313 に答える