外国人のApp最適化経験

3169 ワード

パフォーマンスの最適化
  • UItableViewのFooterViewおよびHeaderViewは、reuseIdentifierを使用することもでき、頻繁に表示される場合、この方法を使用して
  • を最適化することができる.
  • 不透明なViewのOpaqueのプロパティをできるだけYESに設定し、手動で作成したView、特にScrollViewで使用する場合は、できるだけ手動でこのプロパティをYESに設定すると、自動的にレンダリング最適化
  • が行われます.
  • できるだけXibでコントロールを使わないでください.各Xibファイルはプログラムが実行されている間にメモリにロードされます.Xibに多くの画像があれば、多くのメモリリソースを浪費します.
  • UIImageViewの画像は、できるだけ手動でズームして、あなたのImageViewに適応させます.例えば、画像のダウンロード後、その画像をズームして使用します.そうしないと、不要なリソースを浪費します.
  • 遅延ロードViewの2つの方法:
  • はまずこのViewを作成しますが、彼を非表示に設定し、使用する必要があるときに表示します:このスキームは最初からメモリを消費しますが、すでに作成されているので、ユーザーはビューをクリックして表示するのは属性を変更するだけで、カートン感はありません
  • ビューが使用する必要がある場合に作成されます.このスキームはメモリを節約しますが、応答にタイムリーなビューが必要な場合は、
  • のカートン感があります.
  • 繰り返し使用されるデータについては、できるだけ彼をキャッシュします.
  • はNSCacheを使用してキャッシュすることができ、システムがメモリ警告を受けたときに
  • を自動的に解放します.
  • メモリ警告の処理
  • プログラムの実行メモリが大きすぎると、メモリ警告が表示されます.コントローラでdidReceiveMemoryWarning
  • を使用するのは最善の方法ではありません.
  • AppDelegateでは、applicationDidReceiveMemoryWarningメソッド
  • を用いる.
  • コントローラに登録してUIApplicationDidReceiveMemoryWarningNotificationの通知を受け、対応する方法
  • を実行します.
  • データの繰り返し処理を避ける
  • 例えば、サーバからNSArrayのデータのセットを取得した場合、不要なメモリ消費を回避するために、これらのデータを繰り返したり変換したりすることは避けなければなりません.
  • ビューの背景画像について
  • ビューにImageViewを追加するのは最も一般的な方法で、彼は大きな図を背景にして、最もメモリを節約する
  • です.
  • にはもう一つの方法があります.[UIColor colorWithPatternImage:]です.この方法は、小さな図を平らにして背景画像を作るための方法です.もしあなたが小さな画像を持っていて、それを使ってViewを埋めたいなら、これが一番いい方法です.彼はもっと早くViewに
  • をレンダリングします.
  • Viewの影
  • 最も簡単な方法は、Layerを操作することによって達成されます.view.layer.shadowOffset = CGSizeMake(-1.0f, 1.0f);ですが、この方法では、システムがまずあなたのグラフィックを計算し、シャドウを追加し、最後にレンダリングします.これにより、追加のメモリオーバーヘッド
  • が発生します.
  • もう一つのメモリを最適化する方法は、view.layer.shadowPath = [[UIBezierPath bezierPathWithRect:view.bounds] CGPath];です.この方法では、毎回シャドウを計算する必要はありませんが、このpathを自分で計算する必要があります.複雑なスタイルのViewや、よく変更されるViewについては、
  • を更新する必要があります.
  • UItableVIewのいくつかの最適化点
  • は、Cell自体を含むすべてのサブコントロールに、OpaqueをYES
  • に設定するようにします.
  • 画像のスケーリングなどの複雑な操作はできるだけ避け、必要であればキャッシュしてください.そうしないとメモリが
  • 急上昇します.
  • cellのコンテンツがネットワークから来た場合、非同期ロードを使用し、キャッシュ
  • を行う.
  • できるだけrowHeight, sectionFooterHeight, sectionHeaderHeightを使用して高さを設定し、エージェントの繰り返し設定
  • を避ける.
  • プログラムが起動する時、できるだけ大きいXIBを使ってインタフェースを構築することを避けなければならない.彼はメインスレッドの中に置いて描いたので、本当に使いたいなら、StoryBoardを使って、同時にメインインタフェースのデータは必ずバックグラウンドに
  • をロードしなければならないことに注意しなければならない.
  • forループでは、オブジェクトの作成を繰り返す必要がある場合は、メモリのオーバーヘッドを回避するためにautoreleasepoolを使用します.
  • 例えば、forループでは一時オブジェクトの作成を繰り返しますが、これらのオブジェクトはforループの後に使用する必要はありません.この場合、メモリ
  • を最適化するために自動リリースプールを使用する必要があります.
  • ピクチャimageNamedおよびimageWithContentsOfFileをキャッシュするかどうかを選択する
  • 前者について、公式ドキュメントは、この方法が指定された名前でシステムキャッシュ内に画像オブジェクトが存在する場合に検索され、返されると解釈している.キャッシュに対応するピクチャが見つからない場合、このメソッドは指定したドキュメントからロードされ、キャッシュされてオブジェクトに戻ります.
  • すなわち、imageNameはこのピクチャオブジェクトをキャッシュするので、繰り返し使用する必要があるピクチャについては、この方法を用いる必要がある
  • .
  • で後者は、単純にピクチャをロードするだけで、このピクチャが解放されると、再作成する必要があり、キャッシュから
  • を取得することはできない.
  • そのため、それらの画像が大きくて、たまに使うだけのものは、imageWithContentsOfFileでしょう
  • を使います.