Как найти, активен ли NSTimer или нет?
У меня есть что-то вроде этого:
NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(updateCountdown)
userInfo:nil
repeats:YES];
Я обновляю текст ярлыка, используя этот таймер. Не в определенном состоянии я хочу проверить, активен ли таймер, а затем аннулировать таймер. Мой вопрос: как найти активный таймер?
Ответы
Ответ 1
Когда не повторяющийся таймер срабатывает, он отмечает себя как недействительный, поэтому вы можете проверить, действительно ли он действителен до его отмены (и, конечно же, он избавляется от него).
if ( [timer isValid] && yourOtherCondition){
[timer invalidate], timer=nil;
}
В вашем случае у вас есть повторяющийся таймер, поэтому он всегда будет действовать до тех пор, пока вы не предпримете какие-либо действия, чтобы сделать его недействительным. Похоже, в этом случае вы запускаете обратный отсчет, поэтому вам будет необходимо убедиться, что вы недействительны и избавитесь от него, когда обратный отсчет достигнет желаемого значения (в вашем методе updateCountdown)
Ответ 2
NSTimer
имеет метод -isValid
.
Ответ 3
Сохраните таймер в переменной экземпляра и установите timer = nil
, когда нет таймера (т.е. после вызова [timer invalidate]
). Затем, чтобы проверить, включен ли таймер, вы можете просто проверить, есть ли timer == nil
.
Ответ 4
В Swift вы можете использовать isValid
boolean, чтобы узнать, работает ли таймер:
if timer.isValid {
// Do stuff
}
Из Apple docs:
Логическое значение, указывающее, является ли приемник в настоящее время действительный. (Только для чтения)
true, если приемник все еще способен стрелять или false, если таймер был недействителен и больше не способен стрелять.