2012-01-10 41 views
1

可能重复:
NSTimer doesn't stop如何退出NSTimer?

我使用[NSThread exit]离开的NSTimer线程。 它完全停止应用程序。

如何停止或退出NSTimer线程?

+2

定时器不在自己的线程中运行,它们运行在同一个线程中。当事件循环重复时,它会检查是否有任何定时器应该被触发,如果它们应该是,runloop会触发它们,但它都发生在同一个线程中。 – dreamlax 2012-01-10 01:56:28

回答

2

如果你想绝对停止NSTimer你可以使用

[timer invalidate]; 

但是,如果你想暂时阻止计时器解雇你可以考虑使用

[timer setFireDate:[NSDate distantFuture]]; 

Apple Documentation

一旦计划在运行循环中,定时器以指定的时间间隔触发,直到它是无效的。非重复定时器在其触发后立即失效。但是,对于重复计时器,您必须通过调用其无效方法来使计时器对象无效。调用此方法请求从当前运行循环中删除定时器;因此,应始终从安装了计时器的同一线程中调用invalidate方法。使定时器无效立即禁用它,以便它不再影响运行循环。运行循环会在无效方法返回之前或之后的某个时间点删除并释放计时器。一旦无效,定时器对象不能被重用。

3
[timer invalidate]; 
timer = nil; 
0

我不知道你所说的NSTimer thread的意思,但停止的NSTimer比如你安排,你可以调用[NSTimer invalidate]

2

您应该仔细检查以确保您的计时器在使其无效之前有效。

if ([timer isValid]) { 
    [timer invalidate]; 
    timer = nil; 
}