1

iOS デバイスで動作する Objective-C に関して:

バッテリーの消費を最適化する (したがって、クロック サイクルの使用を最小限に抑える) ために、iOS デバイスが構造体を作成して保存するのにかかる労力と、オブジェクトを作成して保存するのにかかる労力に関心があります。

オブジェクトは魔法のように最適化されており、違いはごくわずかですか?それとも、オブジェクトの作成に関連するオーバーヘッドはありますか?

4

2 に答える 2

2

この分野での最適化が魔法のようなものだったとは思えませんが、ユーザーエクスペリエンスの質に対するバッテリー寿命の重要性を考えると、Apple がそれを処理したことは間違いありません. 常識的なガイドラインに従うことで、バッテリー寿命にはるかに大きな影響を与えることができます。

  • 怠惰に:ユーザーが決して必要としない可能性のある多くの作業を行わないでください。

  • ネットワークと GPS を不必要に使用しないでください。無線は大量の電力を消費します。

  • 善良な市民になる:アプリの一時停止などについては、フレームワークに反対するのではなく、フレームワークに協力してください。

  • プロファイル: Instruments を使用して、アプリのバッテリー消費をプロファイルします。

于 2012-05-23T17:19:18.293 に答える
1

C構造体よりも、ObjectiveCオブジェクトの割り当てと初期化の作業が必然的に多くなります。iOSによって作成されたオブジェクトや、iOSで実行されているアプリが非常に多いため、Appleはプロセスを非常にうまく最適化しました。ほとんどの場合、アプリで行われる残りの処理作業によって違いは小さくなります。

オブジェクトの代わりに単純な構造体で表すことができる非常に多くのオブジェクトを扱っている場合、構造体の割り当ては、オブジェクトの割り当てと初期化よりも著しく効率的である可能性があります。

構造体の代わりにオブジェクトを使用しないようにObjectiveCランタイムの機能を再作成しようとしている場合、コードはAppleの最適化されたObjectiveCランタイムよりも効率が悪い可能性があります。ほとんどの場合、より効率的なストレージ割り当てを、効率の低いデータ処理と交換します。

私のアドバイスは、オブジェクト作成のオーバーヘッドについて心配することではありません。表明された目標であるバッテリー寿命の延長を達成するには、カレブのアドバイスを受けることをお勧めします。アプリをプロファイリングして最も効果的な場所を確認し、それらの領域の改善に注力することで、オブジェクトを回避してフレームワークに対抗しようとするよりも多くのメリットが得られます。

于 2012-05-23T19:52:23.707 に答える