2012-01-10 3 views
1

可能性の重複:
NSTimer doesn't stopNSTimerを終了するには?

私はNSTimerスレッドを残すために[NSThread exit]を使用しています。 アプリケーションを完全に停止します。

どのようにNSTimerスレッドを停止または終了しますか?

+2

タイマは独自のスレッドで実行されず、同じスレッドで実行されます。イベントループが繰り返されると、タイマーのいずれかが起動されるべきかどうかがチェックされ、実行する必要がある場合、実行ループはそれらを起動しますが、すべて同じスレッド内で発生します。 – dreamlax

答えて

2

あなたは間違いなくNSTimerを停止する場合は、あなたが一時的にしたい場合は、あなたがApple Documentationから

[timer setFireDate:[NSDate distantFuture]]; 

を使用することを検討して発射するタイマーを防ぐ

[timer invalidate]; 

を使用することがあります。

実行ループでスケジュールされると、指定された間隔でタイマーが起動しますそれは無効にされます。非繰り返しタイマーは、起動後直ちに無効になります。ただし、繰り返しタイマーの場合は、invalidateメソッドを呼び出すことによって、タイマーオブジェクトを自分自身で無効化する必要があります。このメソッドを呼び出すと、現在の実行ループからタイマーの削除が要求されます。その結果、タイマーがインストールされた同じスレッドから常にinvalidateメソッドを呼び出す必要があります。タイマーを無効にすると即座に無効になり、実行ループに影響しなくなります。次に、実行ループは、無効化メソッドが返される直前または後で、タイマーを削除して解放します。無効化されると、タイマーオブジェクトは再利用できません。

3
[timer invalidate]; 
timer = nil; 
0

私はあなたがNSTimer threadによって何を意味するかわからないが、あなたは、スケジュールNSTimerインスタンスを停止するには、[NSTimer invalidate]を呼び出すことができます。

2

無効にする前にタイマーが有効であることを確認してください。

if ([timer isValid]) { 
    [timer invalidate]; 
    timer = nil; 
} 
関連する問題