我有一个带有 NSTimer *myTimer;
变量的类。在某些时候我会这样做:
myTimer = [NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(doStuff) userInfo:nil repeats: YES];
此外,我还有一个方法:
- (void)doStuff
{
if(myTimer)
{
//do stuff
}
}
当类(class)发布时,我停止计时器:
- (void)dealloc
{
if (myTimer) { //if myTimer==nil it already has been stopped in the same way
[myTimer invalidate];
myTimer = nil;
}
}
现在的问题是,当我释放该类时,计时器会一直持续下去并触发事件。难道我做错了什么?似乎 dealloc 方法从未被调用,否则 myTimer 将为 nil,即使选择器被触发,它也不会进入 if(myTimer)
最佳答案
这永远不会起作用,因为计时器保留其目标,这意味着您的 dealloc
方法永远不会被调用,直到您失效
之后计时器。
有关详细信息,请参阅 NSTimer
文档和此博客文章 "Dangerous Cocoa Calls"
关于iphone - NSTimer 没有停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3753238/