0

Instrumensでテストされたアプリで、pauseTimerとresumeTimerを複数回使用した場合に複数のリークが発生するメモリリークが発生しました。

mファイルで定義

NSDate *pauseStart, *previousFireDate;

-(void)pauseTimer{
pauseStart = [[NSDate dateWithTimeIntervalSinceNow:0] retain];
previousFireDate = [[timer fireDate] retain];
[timer setFireDate:[NSDate distantFuture]];
}

  -(void)resumeTimer{
float pauseTime = -1*[pauseStart timeIntervalSinceNow];
//[timer setFireDate:[previousFireDate initWithTimeInterval:pauseTime sinceDate:previousFireDate]];
[timer setFireDate:[NSDate dateWithTimeInterval:pauseTime sinceDate:previousFireDate]];
}

pauseTimerとresumeTimerのこのメモリリークを修正する方法。ユーザーはPauseTimerとresumeTimerを複数回使用できます。

助けに感謝します。

ありがとう。

4

2 に答える 2

1

メソッドが起動されるたびに、の値を保持していますpauseStart。メモリリークを回避するために、新しい値を保持する前に以前の値を解放する必要があります。previousFireDatepauseTimer

最も簡単な解決策は、それらの値に対して2つの保持されたプロパティを作成することです(おそらくクラス拡張で)。したがって、新しい値を設定すると、リリースが自動的に処理されます。(リークを回避するために、deallocメソッドの値を解放することを忘れないでください。)

于 2012-06-27T16:27:17.890 に答える
0

NSTimerのisValidプロパティとinvalidateメソッドを使用できます。

-(void)pauseTimer
{
    if ( !timer.isValid )
        return;

    // remember your fire date

    [timer invalidate];
}

-(void)resumeTimer
{
    if ( timer.isValid )
        return;

    // schedule your timer to new date
    // release old date
}
于 2012-06-27T16:31:03.240 に答える