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

最简单的解决方案是为这些值创建两个保留属性(可能在类扩展中),因此当您设置新值时,将为您处理释放。(只是不要忘记释放你的 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 回答