Iphone 不停
我有一个带有Iphone 不停,iphone,objective-c,nstimer,dealloc,invalidation,Iphone,Objective C,Nstimer,Dealloc,Invalidation,我有一个带有NSTimer*myTimer的类变量。在某些情况下,我会: myTimer = [NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(doStuff) userInfo:nil repeats: YES]; 此外,我还有一个方法: - (void)doStuff { if(myTimer) { //do stuff } } 当通过以下方式释放类时,我停止计时器:
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)
这将永远不起作用,因为计时器保留其目标,这意味着您的dealloc
方法将永远不会被调用,直到您使计时器无效之后
有关更多信息,请参阅文档和本博客文章。您是否尝试过使用方便的调试器工具?如果在dealloc方法中设置断点,会发生什么?此外,你应该在你的作品周围张贴更多的上下文。您是否可能多次创建计时器,从而替换原来的计时器(但不会使其失效),并让它随意启动?因此您应该在预期对象消失之前清理计时器。@Joshua+1我是这么说的。。。您必须使计时器无效
才能将对象释放
,这可能会触发dealloc
方法(只是不用这么多的话):)我不会多次创建它。只有一个地方,而且只有一次。