消費電力と検出のiOSの最適化

まず、消費電力検出

「設定」に1、携帯電話 - >「バッテリー」は、視覚的にモバイルアプリケーションの消費電力を見ることができます。

6006739-db9d6696251eb730.png
image.png

6006739-acb4774b5582349c.png
image.png

、(実際のマシンでなければなりません)Xcodeプロジェクトを開き、プロジェクトを実行している実機を使用して、携帯電話に接続し、その後、+ 6を指揮、エネルギーインパクトを2クリック

6006739-16ea679f8c0c347a.png
image.png
  • ブルー示し - 合理的
  • イエロー - より多くの電力を示します
  • 赤-わずかしかことを示す
    瞬間電力消費のケースで利用カラムをグラフ
    チャート平均列の平均電力消費表し
    コートにおけるチャートエネルギー衝撃(青)プロジェクトコード、オーバーヘッド(赤)を実行するのに必要な電力を表しますこのような呼び出しとしてCPUの呼び起こす、無線モジュール(ブルートゥース&無線LAN)、および他のシステム・リソースを含む表現費。
    電力消費量に影響を与える5つの要因は、電力消費量は、グレー、白示すない電力消費を有します
  • CPU:CPUの使用率は、バッテリーの電力消費の20%は、高速で効率的かつ実用的なCPUとなります超えて、物事を行うには迅速に対応するとき、ユーザー入力ぼやけて見えます。
  • ネットワーク:ネットワーク活動は、長い時間を連想させるが、定期的に必要とされるパワー無線モジュールのバッチは、オーバーヘッドを減らすためにネットワークを要求することができます
  • 場所:精度&高周波数のポジショニングは、オンデマンドで必要な、オーバーヘッドが増加します。
  • GPU:グラフィックスプロセッシングユニット(グラフィックスプロセッサ)、ランダムな相互作用は、GPUの差が生じると、バッテリの寿命を減らします。
  • 背景:背景の状態はAPP、即時縮小操作に入り、これらの操作が完了した後にシステムに通知したときに、バックグラウンドの状態がまだパワーAPPを消費し、APPは、さらに、バックグラウンド操作を実行し、効率的に行うシステム動作を保証するために、遅延のAPIを使用してするために必要な。

3、エネルギーログのインストゥルメントを使用して

ステップ1:電話の設定を開き、「開発者」をクリックしてください


6006739-14f17d20b9119bc3.png
image.png

ステップ2:ログをクリックします


6006739-ba568cf1e09270b3.png
image.png

ステップ3:エネルギーを選択し、startRecordingをクリックしてください
6006739-9e8065b788bec2e4.png
image.png

4段階:ファイル名を指定して実行APPは、テストを必要とする(携帯電話は携帯電話自体がバッテリーを消費していることを確認してください)、3-5分を実行して、携帯電話の設定を入力stopRecordingをクリックしてください


6006739-5de90f0c92dbc58e.png
image.png

ステップ5:使用Xcodeの、と電話がXcodeのに接続され、エネルギーログに楽器を開いている、デバイスからの輸入ツールバーログデータをクリックしてください
6006739-93f837f65ec8398f.png
image.png

第六ステップ:ログ・セル損失を取得します
  • エネルギーレベル値の使用(0--20)、大きな値は、消費電力を示し、
  • CPUのCPUの活動は、さまざまな活動を表し、


    6006739-b7636ddabfd8b620.png
    image.png

消費電力の最適化

まず、コードレベル

1、NSDateFormatter及び高いオーバーヘッドオブジェクトようNSCalendarの使用の合理化

  • パフォーマンステストは、NSDateormatterのパフォーマンスのボトルネックがNSDateFormatter作成意味の一つのケースは、NSStringの形式を変換するNSDataの形式によるもので、そうではない、ことを示している方法があるお勧めします。キャッシュとして最も一般的に使用される日付形式。
static NSDateFormatter *cachedDateFormatter = nil;

+ (NSDateFormatter *)cachedDateFormatter {

if (!dateFormatter) {

dateFormatter = [[NSDateFormatter alloc] init];


[dateFormatter setDateFormat: @“YYYY-MM-dd HH:mm:ss”];

}

return dateFormatter;

}

2は、頻繁ではないリフレッシュにページを行い、一行はreloadDataを使用しないようにしよう、リフレッシュにのみ最高の細胞株をリフレッシュすることができます。

3、正しいコレクションを選択

  • NSArrayの、すばやく見つけるために、インデックスを使用(挿入および欠失非常に遅いです)
  • 辞書には、すぐに見つけるためにキーを使用します
  • NSSetsは順不同です、すぐにすぐに削除/挿入し、キーを見つけます

4は、より少ないフィレットを得るために計算され、またはview.maskToBoundsのlayer.clipToBoundsは素晴らしいリソースオーバーヘッドをするかどうか、あなたはフィレットを使用する必要があり、丸い絵そのものを作る方が良いです

5、遅延ロードは、一度にすべてのサブビューを作成するには、だけで作成する必要はありません

6、リユース

  • あなたはすべての時間のサブビューを作成するのではなく、完全な本当の名前を作成するために必要なときに、再利用可能なコレクションに彼を入れていない、のUITableViewとUICollectionViewを模倣することができます。

図7に示すように、画像処理

  • 同じサイズのImageViewのの画像は、不要な動作を避けます
  • あなたは、画像の全体のペアを使用するアプリケーションの音量を上げますが、CPUを保存することができます
  • 調節可能なサイズの画像は、いくつかの不要なスペースを節約します
  • CALayerの、CoreGraphics、でもOpenGLはCPUを消費し,,描画します

8、キャッシュ、キャッシュ、キャッシュ(キャッシュすべて必須)

  • 対応するキャッシュサーバ(画像)の結果
  • キャッシュ複雑な計算結果(のUITableViewの行の高さ)

図9に示すように、透明または半透明の使用を最小限にするために、追加の操作をもたらします

10は、メモリの使用ARC食品を減らすために、にdeallocを書き換えする必要があり、プロパティがnilに設定されています

11、巨大なXIBを避けるために、ストーリーボードは、純粋なコードの開発を使用してみてください

CPUレベル

1、タイマー間隔は需要を満たすにはあまりにも短くすべきではありません

2.あまりない、適切な量をスレッド、メインスレッドをブロックしません

3、サイクル数を減らすために最適化アルゴリズム

図4に示すように、位置決めおよびBluetoothアクセス要求、又は位置決め後近い位置の頻度を低減します

ます。https://www.jianshu.com/p/10bd19df2b14で再現

おすすめ

転載: blog.csdn.net/weixin_33851604/article/details/91159888