web-dev-qa-db-ja.com

iPhoneのメモリリークをどのように検出しますか?

Xcodeを介してLeaksInstruments機能を使用して、メモリリークを(試して)見つけています。私はまだこのプログラムの使い方を理解していません。プログラムで[リーク]をクリックすると、シミュレータでさまざまなことを行うとメモリが増加します。拡張詳細ペインが表示されています。私のアプリを参照する拡張詳細ペインの唯一のものはメインです。 Xcodeによって生成されたメインメソッドのように。それ以外はすべて、UIKit、Foundations、および私が作成しなかったその他のSDKクラスです。アプリから何も表示されないのに何が間違っているのですか?

3分に達する前に、合計2.5kの100を超えるリークがあります。これは一般的ですか?

24
4thSpace

Instrumentsを使用してiPhoneのメモリリークを追跡するためのチュートリアルを作成しました。それがあなたが扱っていることであなたを助けるかどうかはわかりません...しかし、傷つけることはできませんでした。 :-)

http://www.streamingcolour.com/blog/tutorials/tracking-iphone-memory-leaks/

29
OwenGoss

インストルメントパネルのビューを「拡張詳細」に変更します。これにより、記録を停止してリークされたオブジェクトを選択した後、リークされた各オブジェクトのスタックトレースが表示されます。

APIへの呼び出しはありますが、関心があるのは、API呼び出しの前にアプリケーションの最後のメソッドを見つけることです。これは、リークが発生する場所です。

ヒント:リークビューで「メモリコンテンツの収集」をオンにします。オブジェクトの値を確認することも、問題の場所を見つけるのに役立ちます。

漏れは必要ありません。 100リークは一般的ではありません(少なくとも私のアプリでは;)一般的は0である必要があります。

5
lajos

Leaksの使用方法に精通していませんが、コードでClangアナライザーを実行して、問題が発生するかどうかを確認できます。 http://clang.llvm.org/StaticAnalysis.html 。多くの場合、メモリリークにつながる可能性のある多くのバグを見つけることができます。

3
Sophie Alpert

Xcode:実行->パフォーマンスツールで開始->リーク

3
Xorsat

LLVM/ClangStaticAnalyzerを使用してください。

2
john

デバイスがリークしない場合、シミュレータがリークする可能性があることに注意してください。 UITableViewControllerクラスですでに一度それを実行しました。

2
Genericrich
Run -> Start with Performance Tool -> Leaks
1
Shawn

リークツールでは、オブジェクトが過剰に保持されたままになっているインスタンスは表示されないことにも注意してください。リークとは、手放すべきオブジェクトが、誰も片付けていない状態でぶらぶらしている場合です。過剰に保持されたオブジェクトは、削除する必要があると思われる場合でも有効に保持されます。したがって、それらはまだ参照されており、保持する必要があるオブジェクトと区別する方法がないため、リークツールはそれらを指摘できません。

それらを見つけるには、メモリレポートツールを使用し、オブジェクトを解放した後にメモリ使用量が完全に減少することを確認します。何かがメモリを解放していないことに気付いた場合は、deallocにブレークポイントを設定して、リリースされると予想されるものが実際にリリースされているかどうかを確認することから始めることができます。

クリーンなメモリフットプリントを維持するには、両方のケースを探す必要があります。

メインメモリリークツールの要約を作成しました: http://bcaccinolo.wordpress.com/2010/09/15/iphone-essential-performance-tools-list/

0

メモリリークを見つける最良の方法の1つは、[製品]-> [分析]を選択することです。左側のXcodeは、メモリリークが発生しているファイルを示しています。メモリリークの原因となる変数は何ですか。これは、メモリリークを見つけるための最良の方法の1つです。

0
user2998756

メモリリークを検出するには、Xcodeの「ビルドと分析」機能を使用できます。

Xcodeメニューでビルド->ビルドと分析を選択するだけです。

0
Abramodj

Xcodeにあるリークアプリケーション:run -> Start with Performance Tool -> Leaks

/Developer/Applications/Performance ToolsにあるAppleのInstrumentsユーティリティ。

0
Shawn