NSLocalizedString() によって返された文字列を保存する必要がありますか?
-
03-07-2019 - |
質問
私は現在、初期リリースに向けて英語と日本語の両方にローカライズしている iPhone アプリに取り組んでいます。私たちは頻繁に電話をかけます NSLocalizedString()
表示用に適切なローカライズされた文字列をロードします。一般に、ローカライズされた文字列は次回必要になるときに備えてインスタンス変数に保存しておいたほうがよいでしょうか、それともここではマイクロ最適化を行っており、必要になるたびに文字列をリロードするだけでよいのでしょうか?
解決
これは、「依存する」ものの1つです。回答。
NSLocalizedStringを呼び出すには、バンドル内でルックアップを実行する必要があります。これらの検索は非常に高速ですが、無料ではありません。この戻り値をキャッシュするか、NSLocalizedStringを呼び出すだけの利便性を持つかは、その使用方法によって異なります。
-
へのリターンを渡す場合 のようなもののテキストフィールド UILabelまたはUITableViewCellその後 ルックアップは 最初にプロパティを設定します。
-
drawRectで使用している場合 呼び出し、ルックアップのみ ビューが必要なときに起こる 頻繁に塗り直されますが、 まれに、またはまったくありません。
-
ゲームUIで使用する場合、 画面はフレームごとに再描画されます その後、いくつかのUI要素のためにこれら ルックアップは数百回発生する可能性があります 毎秒。
#3のようなものについては、結果のキャッシュから始めるべきだと思います。
その他については、最も便利な方法で記述し、UIのパフォーマンスに問題がある場合は、Instrumentsを使用して原因を絞り込みます。 NSLocalizedStringの場合、それに応じて最適化します。
他のヒント
マイクロ最適化。最初に動作させ、次に正しく動作させ、それから高速にします。手順3に到達したら、Shark (またはInstruments)を実行し、そのガイダンスに従います。
パフォーマンスへの影響はそれほど大きくないと思われます。NSLocalizedString(key, comment) は、次のように変換するマクロです。
[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]
ベンチマークをしないと、これがどれくらい高価なのかわかりませんが、それほど悪くはないと思います。これがパフォーマンスのボトルネックになることはないと思いますが、いつでも Shark または Instruments を実行して、デバイス上でアプリケーションを実行するときに自分の目で確認することができます。