13

私がJavaStandardEditionを学んでいたとき、getter関数とsetter関数は、変数を非表示にし、変数への直接アクセスを減らすためによく使用されていました。Androidでは、これらの関数を使用せず、変数を直接変更するだけでよいと、いくつかの情報源から言われています。その理由は、Androidでゲッターとセッターを使用するとオーバーヘッドが原因でパフォーマンスが低下するためです。その結果、メモリの使用量が増え、システムの速度が低下します。

これに真実はありますか?ある場合、ゲッターとセッターを使用するとパフォーマンスが低下するのはなぜですか?

4

3 に答える 3

9

ここにあるドキュメントの時点で、ゲッターとセッターを使用することはAndroidでは悪い考えです。それが言うように、

これはAndroidでは悪い考えです。仮想メソッド呼び出しは、インスタンスフィールドルックアップよりもはるかにコストがかかります。一般的なオブジェクト指向プログラミングの慣例に従い、パブリックインターフェイスにゲッターとセッターを含めることは合理的ですが、クラス内では常にフィールドに直接アクセスする必要があります。

パフォーマンスの詳細については、こちらをご覧ください。

于 2012-12-19T02:33:06.190 に答える
7

Google androidチームが提供するパフォーマンスのヒントによると:

JITがない場合、フィールドへの直接アクセスは、些細なゲッターを呼び出すよりも約3倍高速です。JIT(直接フィールドアクセスはローカルへのアクセスと同じくらい安価です)を使用すると、直接フィールドアクセスは簡単なゲッターを呼び出すよりも約7倍高速です。

ただし、優れたコーディング手法がより重要であり、チームは次のことにも言及していることに同意します。

ProGuardを使用している場合は、ProGuardがアクセサをインライン化できるため、両方の長所を活用できることに注意してください。

したがって、ゲッターとセッターを使用しても大丈夫だと思います;)

参照

于 2012-12-19T02:35:40.187 に答える
4

セッターとゲッターのパフォーマンスの低下はごくわずかです。パブリックフィールドは悪い習慣であり、データのカプセル化と情報の隠蔽というオブジェクト指向の原則に違反しています。

セッターまたはゲッターを使用するには、フィールドに直接アクセスするよりも1つのプロパティ呼び出しが必要です。それは何もないので、心配しないでください。良いコードを書くことに集中してください。

編集:

明確にするために、これは他のポスターが引用しているのと同じAndroidドキュメントからのものです。

一般的なオブジェクト指向プログラミングの慣例に従い、パブリックインターフェイスにゲッターとセッターを含めることは合理的ですが、クラス内では常にフィールドに直接アクセスする必要があります。

言い換えれば、あなたはまだゲッターとセッターを必要としています。フィールドに直接アクセスできるため、これらのメソッドを保持するクラス内からそれらを呼び出さないようにする必要があります。

于 2012-12-19T02:30:53.163 に答える