我有一个带NSTimer *myTimer;
变量的类。在某些时候我做了:
myTimer = [NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(doStuff) userInfo:nil repeats: YES];
此外,我有一个方法:
- (void)doStuff
{
if(myTimer)
{
//do stuff
}
}
我通过以下方式释放课程时停止计时器:
- (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)
答案 0 :(得分:7)
这将永远不会有效,因为计时器保留了他们的目标,这意味着你的dealloc
方法永远不会被调用,直到之后你invalidated
计时器。
有关详细信息,请参阅NSTimer
答案 1 :(得分:0)
您是否尝试过方便的调试工具?如果在dealloc方法中设置断点会发生什么?此外,您应该在创作周围发布更多上下文。您是否有可能不止一次创建计时器,从而替换原始计时器(但不会使其失效)并将其留在那里随意点火?