0

メモリリークオブジェクトNSDateを取得し、担当ライブラリは UIKit 担当フレームはUIApplication:sendAction:to:from:forEvent:です。このメモリリークを修正するにはどうすればよいですか。私はインターフェイスビルダーをまったく使用していません。すべてがプログラムで行われます

Event Type  Responsible Library Responsible Caller
Malloc      UIKit                   [UIApplication sendAction:to:from:forEvent:]
Autorelease UIKit                   [UIApplication sendAction:to:from:forEvent:]
Retain      UIKit                   [UIApplication sendAction:to:from:forEvent:]
Release     Foundation           [NSAutoreleasePool release]

ありがとう

4

1 に答える 1

3

Instrumentsが責任のあるライブラリがUIKitであると言っていても気にしないでください。これは、メモリの実際の割り当てがUIKit内で行われたことを意味するだけですが、リークの責任はあなたのコードにあるとほぼ確信しています。これは、SDK フレームワークである責任あるライブラリで Instruments/Xcode が検出するメモリ リークに関する私の経験とほとんど同じです。

私の提案は、割り当てている NSDate を確認し、それらがすべて解放されていることを確認することです。リークされたオブジェクトは、Instruments が報告する型に間接的にのみ関連している場合があります。

最終的に、リークの原因を発見する最も効果的な方法は、計測器がリークを示したときに実行されるコードを調べることです (どのビューを使用していたか、どのタスクを使用していたかなど)。

あなたのコードを見なければ、これ以上正確なことは言えません。

編集:

コードを見て、実行するとどうなるかを確認することをお勧めします。

pauseStart = [[NSDate dateWithTimeIntervalSinceNow:0] retain];

オブジェクトを参照している場合pauseStart、このように割り当てると、前のオブジェクトへの参照が失われるため、リークが発生します。あなたができる:

[pauseStart release];
pauseStart = [[NSDate dateWithTimeIntervalSinceNow:0] retain];

またはそれ以上

self.pauseStart = [NSDate dateWithTimeIntervalSinceNow:0];

(ここでpauseStartは、プロパティを保持するようなものだと思います)。

お役に立てれば。

于 2012-06-27T17:20:34.823 に答える