Подтвердить что ты не робот

Как найти, активен ли NSTimer или нет?

У меня есть что-то вроде этого:

 NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                                   target:self
                                                 selector:@selector(updateCountdown)
                                                 userInfo:nil
                                                  repeats:YES]; 

Я обновляю текст ярлыка, используя этот таймер. Не в определенном состоянии я хочу проверить, активен ли таймер, а затем аннулировать таймер. Мой вопрос: как найти активный таймер?

4b9b3361

Ответ 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, если таймер был недействителен и больше не способен стрелять.