2012-01-10 38 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; 
}