iPhone でメモリ リークの問題が発生し (想像してみてください)、保持カウントが 10 のカスタム オブジェクトがあります。
特定のオブジェクト インスタンスの保持カウントの増加を引き起こしたコードを知る方法はありますか? それが重要な場合、私はGHUnitを使用しています。
iPhone でメモリ リークの問題が発生し (想像してみてください)、保持カウントが 10 のカスタム オブジェクトがあります。
特定のオブジェクト インスタンスの保持カウントの増加を引き起こしたコードを知る方法はありますか? それが重要な場合、私はGHUnitを使用しています。
を使ってみてくださいBuild & Analyze
。通常、オブジェクトが保持されていて解放されていないかどうかがわかります。/
保持カウントはほとんど役に立ちません。何かがステートメントでretain
ed とautorelease
d を取得した場合、それはまったく問題ありませんが、その保持カウントは 1 増加します。
特定のオブジェクトが編集されている場所を正確に見つけたい場合はretain
、クラスのretain
実装をオーバーライドしてオブジェクトをテストし、そこにブレークポイントを設定します。
@implementation MyClass
-(id) retain
{
if(self == ObjectThatImTracking)
NSLog(@"[ObjectThatImTracking retain]\n"); // put a breakpoint here
return [super retain];
}
次に、デバッガーでプログラムを実行し、ブレークポイントにヒットしたときのコール スタックを調べます。
リーク ツール (XCode の「手段」の 1 つ) はそのようなことを分析できますが、プログラムでそれを行うことはできないと思います。
ここに素晴らしいチュートリアルがあります: http://mobileorchard.com/find-iphone-memory-leaks-a-leaks-tool-tutorial/
(コメントを要約するために更新): 保持メソッドにブレークポイントを設定する場合 (スタック トレースを確認するため) は、保持メソッドをオーバーライドできます。
モジュール内のクラスのすべての保持ケースを見つけようとしましたか? メイビーそれは役立ちます..