1

iPhone でメモリ リークの問題が発生し (想像してみてください)、保持カウントが 10 のカスタム オブジェクトがあります。

特定のオブジェクト インスタンスの保持カウントの増加を引き起こしたコードを知る方法はありますか? それが重要な場合、私はGHUnitを使用しています。

4

4 に答える 4

3

を使ってみてくださいBuild & Analyze。通常、オブジェクトが保持されていて解放されていないかどうかがわかります。/

于 2010-11-06T22:01:59.567 に答える
2

保持カウントはほとんど役に立ちません。何かがステートメントでretained とautoreleased を取得した場合、それはまったく問題ありませんが、その保持カウントは 1 増加します。

特定のオブジェクトが編集されている場所を正確に見つけたい場合はretain、クラスのretain実装をオーバーライドしてオブジェクトをテストし、そこにブレークポイントを設定します。

@implementation MyClass
-(id) retain
{
    if(self == ObjectThatImTracking)
        NSLog(@"[ObjectThatImTracking retain]\n");  // put a breakpoint here
    return [super retain];
}

次に、デバッガーでプログラムを実行し、ブレークポイントにヒットしたときのコール スタックを調べます。

于 2010-11-06T22:08:17.053 に答える
2

リーク ツール (XCode の「手段」の 1 つ) はそのようなことを分析できますが、プログラムでそれを行うことはできないと思います。

ここに素晴らしいチュートリアルがあります: http://mobileorchard.com/find-iphone-memory-leaks-a-leaks-tool-tutorial/

(コメントを要約するために更新): 保持メソッドにブレークポイントを設定する場合 (スタック トレースを確認するため) は、保持メソッドをオーバーライドできます。

于 2010-11-06T22:00:03.607 に答える
0

モジュール内のクラスのすべての保持ケースを見つけようとしましたか? メイビーそれは役立ちます..

于 2010-11-06T22:03:44.220 に答える