2

インストルメントでメモリリークを追跡しました。私はいつも、担当ライブラリが Foundation であるという情報に行き着きます。コードでそれを追跡すると、ここに行き着きますが、メモリ管理に問題はありません。

- (void)setupTimer {
    // stop timer if still there
    [self stopAnimationTimer];

    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(step:) userInfo:nil repeats:YES];

    self.animationTimer = timer; // retain property, -release in -dealloc method
}

プロパティ animationTimer はタイマーを保持しています。-dealloc で -リリースします。

これはフレームワークのバグのように見えますか? iPhone OS 3.0 と 3.1 で確認しましたが、このように NSTimer を使用するたびに、どちらも問題が発生します。他に何が問題になる可能性がありますか?

(私のメモリリークスキャン間隔は0.1秒でしたが、5秒でも同じです)

4

3 に答える 3

5

電話しないでください-[NSTimer dealloc]。これまで。

この場合、-scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:によってバランスが取れてい-invalidateます。タイマー オブジェクトに対して-deallocorを呼び出す必要はありません。-release

于 2010-03-19T21:52:11.647 に答える
3

stopAnimationTimerメソッドがプロパティをinvalidate'ing and release'ing (そして に設定nil)しない限り、animationTimerメモリ リークが発生しています。

于 2010-03-19T21:49:14.097 に答える
1

私はそれを見つけました:私は自分のタイマーに強く言及していました. 実行ループはそれを保持します。したがって、RC は 2 でした。しかし、タイマーもターゲットへの強力な参照を保持しているため (私の場合はタイマーを保持していました)、デッドロック状態になりました。-dealloc が呼び出されたことがないため、タイマーが解放されることはありませんでした。なんてこった。

于 2010-03-19T22:16:10.527 に答える