简体   繁体   English

NSTimer暂停/恢复泄漏

[英]NSTimer Pause/ resume leak

I wanted to be able to Pause/ Resume my NSTimer and found this below answer : 我希望能够暂停/恢复我的NSTimer,并在下面找到答案

 NSDate *pauseStart, *previousFireDate; -(void) pauseTimer:(NSTimer *)timer { pauseStart = [[NSDate dateWithTimeIntervalSinceNow:0] retain]; previousFireDate = [[timer fireDate] retain]; [timer setFireDate:[NSDate distantFuture]]; } -(void) resumeTimer:(NSTimer *)timer { float pauseTime = -1*[pauseStart timeIntervalSinceNow]; [timer setFireDate:[previousFireDate initWithTimeInterval:pauseTime sinceDate:previousFireDate]]; [pauseStart release]; [previousFireDate release]; } 

which works fine. 效果很好。 However when testing my App for Leaks, it tells me that I get a leak in here: 但是,当测试我的App的泄漏时,它告诉我这里有泄漏:

[timer setFireDate:[previousFireDate initWithTimeInterval:pauseTime sinceDate:previousFireDate]];

Can anyone help me? 谁能帮我? You can see from the code i used that pauseStart and previousFireDate are retained in the pauseTime method and released in the resumeTimer method. 您可以从我使用的代码中看到,pauseStart和previousFireDate保留在pauseTime方法中,并在resumeTimer方法中释放。

Many thanks 非常感谢

Sam 山姆

You should never call init (or any of the other methods in the same family) on an object twice. 永远不要在对象上两次调用init (或同一族中的任何其他方法)两次。 ( Here's why ). 这就是原因 )。 Change that line to this: 将该行更改为此:

[timer setFireDate:[NSDate dateWithTimeInterval:pauseTime sinceDate:previousFireDate]];

and you'll be fine. 你会没事的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM