2012-01-10 5 views
1

Можно создать дубликат:
NSTimer doesn't stopКак выйти из NSTimer?

Я использую [NSThread exit] оставить нить NSTimer. Он полностью останавливает приложение.

Как вы можете остановить или выйти из нити NSTimer?

+2

Таймеры не запускаются в своей собственной нити, они работают в одной и той же ветке. Когда цикл цикла повторяет, он проверяет, нужно ли запускать какой-либо из таймеров, и если они должны быть, runloop запускает их, но все это происходит в одном потоке. – dreamlax

ответ

2

Если вы хотите определенно остановить NSTimer вы можете использовать

[timer invalidate]; 

Однако, если вы хотите, чтобы временно предотвратить таймер на огонь, вы можете рассмотреть возможность использования

[timer setFireDate:[NSDate distantFuture]]; 

От Apple Documentation:

После того, как вы запланировали цикл работы, таймер срабатывает с заданным интервалом до тех пор, пока он признан недействительным. Не повторяющийся таймер недействителен сразу после его возникновения. Однако для повторяющегося таймера вы должны сделать недействительным сам объект таймера, вызвав его метод invalidate. Вызов этого метода требует удаления таймера из текущего цикла цикла; в результате вы всегда должны вызывать метод invalidate из того же потока, на котором был установлен таймер. Недействительный таймер немедленно отключает его, чтобы он больше не влиял на цикл выполнения. Затем цикл выполнения удаляет и освобождает таймер, либо перед возвратом метода invalidate, либо в какой-то более поздний момент. После недействительности объекты таймера не могут быть повторно использованы.

0

Я не уверен, что вы имеете в виду NSTimer thread, но остановить NSTimer экземпляр, по расписанию, вы можете позвонить [NSTimer invalidate].

2

Необходимо выполнить двойную проверку, чтобы убедиться, что ваш таймер действителен до его аннулирования.

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