Возможно, вы неправильно понимаете, как работает NSTimer
.
NSTimer
вызов обрабатывается циклом выполнения, когда таймер запланирован, он подключается к текущему циклу выполнения. Неудивительно, что цикл выполнения является циклом и выполняется в одном потоке. На каждой итерации цикла выполнения выполняется проверка, нужно ли запускать какой-либо таймер, и если это так, то называется , и поэтому следующая операция, которую цикл выполнения будет выполнять, не может произойти, пока этот вызов не вернется ...
таймер использует scheduleTimerWithTimeInterval. если таймер срабатывает каждые 0,02 с, как отменить перекрывающиеся вызовы таймера?
При нормальных обстоятельствах вызовы просто не могут перекрываться, поскольку следующий не может произойти, пока текущий не вернет .
Конечно, если вы отправляете работу асинхронно с другим потоком в вашем таймере, запускаете другой цикл выполнения из таймера и планируете таймер на этом же, или любым другим творческим способом, который вы придумали, тогда этоВозможно создание условий для «перекрывающихся» звонков. Ваш timerFireMethod:
ничего подобного не делает и будет просто вызываться, выполняться и возвращаться.
становится ли "Self.Mycount" 0 в середине выполнения цикла for, вызывая неожиданное поведение?
Возможно - поскольку ваш метод не предназначен для этого сценария. Но если вы не запустите другой поток (используя NSThread, GCD (диспетчеризация) и т. Д.) И не установите для него значение Mycount
, равное нулю, этого не произойдет.
HTH