次の方法を取ります (Ruby で記述されていますが、この質問はほとんどの OO 言語に適用できます)。
# Getter method which returns an alert
def alertView
_alertView = AlertView.new
_alertView.title = "This is the title"
_alertView.body = "This is the body of my alert"
_alertView
end
このメソッドは、アプリケーションのライフサイクルを通じて定期的に呼び出されるとします。タイトルと本文の属性文字列は、毎回新しいオブジェクトとしてインスタンス化されます。
これを最適化するには、次のようにします。
ALERT_TITLE = "This is the title"
ALERT_BODY = "This is the body of my alert"
# Getter method which returns an alert
def alertView
_alertView = AlertView.new
_alertView.title = ALERT_TITLE
_alertView.body = ALERT_BODY
_alertView
end
このように、文字列ALERT_TITLE
とALERT_BODY
文字列は、クラスが定義されたときに 1 回だけインスタンス化され、アプリケーションのライフサイクル全体で再利用されます。
私の質問は: 2 番目のアプローチは最適ですか? これは、ガベージ コレクターの作業が減り、メモリの使用が安定することを意味しますが、現在必要のないオブジェクトを解放するのではなく、アプリケーションが常により多くのメモリを消費していることも意味します。これをアプリケーション内のすべての定数文字列に適用するか、このアプローチをまったく適用せず、必要に応じて各文字列を定義するかで迷っています。
3 番目のアプローチはクラス変数を使用することですが、これが 2 番目のアプローチより優れている点は、変数が遅延ロードされることだけです。
# Getter method which returns an alert
def alertView
_alertView = AlertView.new
_alertView.title = @@alert_title ||= "This is the title"
_alertView.body = @@alert_body ||= "This is the body of my alert"
_alertView
end