在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。
感谢帮助。
感谢。
答案 0 :(得分:1)
每次触发pauseStart
方法时,您都会保留previousFireDate
和pauseTimer
的值。您需要在保留新值之前释放先前的值,以避免内存泄漏。
最简单的解决方案是为这些值创建两个保留属性(可能在类扩展中),因此当您设置新值时,将为您处理该版本。 (只是不要忘记在dealloc方法中释放值以避免泄漏。)
答案 1 :(得分: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
}