Документация NSTimer гласит:
Из-за различных источников входного сигнала
Типичный цикл выполнения управляет,
эффективное разрешение времени
интервал для таймера ограничен
порядка 50-100 миллисекунд. Если
время срабатывания таймера
цикл выполнения находится в режиме, который не
мониторинг таймера или в течение длительного
выноска, таймер не срабатывает до
в следующий раз цикл выполнения проверяет
таймер. Поэтому фактическое время в
который может сработать таймер
значительный период времени после
запланированное время стрельбы.
Таким образом, точность может составлять 0,1, а не 0,01 секунды. Не говоря уже о том, заблокирован ли ваш поток по какой-либо причине. Так что, если ваше время увольнения имеет решающее значение, вы должны смотреть на другие вещи. Прочитайте это ТАК сообщение для начала. У Apple был пример кода метронома (в котором, очевидно, время имеет решающее значение), но я не могу найти его сейчас.
В любом случае, если вы используете таймер с NSTimer, вы должны записать время запуска. Затем, всякий раз, когда вы обновляете свой интерфейс, просто принимайте разницу текущего времени и вашего времени начала (с NSDates).