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

Я предложил бы использовать самый краткий, основанный на стандартах подход, который можно найти для любой данной проблемы. Ваш коллега, который использовал Perl, продемонстрировал, что хороший разработчик, который знает конкретный инструмент хорошо, может достигнуть больших результатов независимо от методологии. Вместо того, чтобы сравнивать Ваши проекты Java по сравнению с Perl как хороший пример ПРОЦЕДУРНЫХ ПО СРАВНЕНИЮ С ООП дебатов, я хотел бы видеть конфронтацию между Perl и столь же кратким языком, таким как Ruby, который, оказывается, также обладает преимуществами объектной ориентации. Теперь это - что-то, что я хотел бы видеть. Моим предположением является Ruby, преуспел бы, но я не интересуюсь вызовом войны пламени языка здесь - моя точка только, что Вы выбираете соответствующий инструмент для задания - независимо от того, что подход может выполнить задачу самым эффективным и устойчивым возможным способом. Java может быть устойчивым из-за своей объектной ориентации, но поскольку Вы и Ваш коллега и многие другие, которые преобразовывают в динамические языки, такие как Ruby и Python, находите в эти дни, существуют намного более эффективные решения там, или процедурный или ООП.

29
задан Alex Rozanski 28 October 2009 в 11:40
поделиться

3 ответа

Когда срабатывает неповторяющийся таймер, он помечает себя как недействительный, чтобы вы могли проверить, действует ли он, прежде чем отменить его (и, конечно, затем избавиться от него).

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

В вашем случае у вас есть повторяющийся таймер, поэтому он всегда будет действительным, пока вы не предпримете каких-либо действий по его аннулированию. Похоже, что в этом случае вы запускаете обратный отсчет, поэтому вам нужно убедиться, что вы аннулировали и избавились от него, когда обратный отсчет достигнет желаемого значения (в вашем методе updateCountdown)

69
ответ дан 28 November 2019 в 00:53
поделиться

NSTimer имеет метод -isValid .

8
ответ дан 28 November 2019 в 00:53
поделиться

Сохраните таймер в переменной экземпляра и установите timer = nil , когда таймер не работает (то есть после вызова [таймер недействителен] ). Затем, чтобы проверить, активен ли таймер, вы можете просто проверить, равно ли timer == nil .

5
ответ дан 28 November 2019 в 00:53
поделиться