Будут ли события NSTImer блокировать основной поток? - PullRequest
5 голосов
/ 10 мая 2011

Когда мы используем NSTimer, после обратного вызова после указанного интервала будет ли блокироваться пользовательский интерфейс?

Ответы [ 2 ]

9 голосов
/ 11 мая 2011

Это зависит. В большинстве случаев это не будет проблемой.

Если, однако, выполнены оба следующих критерия, NSTimer заблокирует поток пользовательского интерфейса:

  1. Таймер запланирован на NSRunLoop основного потока. Это будет происходить всякий раз, когда вы создали его, вызвав один из scheduledTimerWith... class-методов NStimer в главном потоке.
  2. Метод, который вызывается при срабатывании таймера, выполняет "длинные" задачи. На ум приходят такие вещи, как синхронно выполняемые выборки / URL-запросы ...
2 голосов
/ 10 мая 2011

Из документов

Таймеры работают совместно с запуском петли. Чтобы эффективно использовать таймер, вы надо знать как работают циклы работать - см. NSRunLoop и Threading Руководство по программированию.

После того, как запланировано на цикл выполнения, таймер срабатывает с заданным интервалом пока это не признано недействительным. неповторяющийся таймер аннулирует себя сразу после того, как он выстрелил. Тем не мение, для повторяющегося таймера вы должны лишить законной силы объект таймера вызвав его недействительный метод. Вызов этого метода запрашивает снятие таймера с текущего цикл запуска; в результате вы должны всегда вызывать метод invalidate из тот же поток, на котором был таймер установлены. Аннулирование таймера немедленно отключает его, чтобы он не дольше влияет на цикл выполнения. Бег цикл затем удаляет и освобождает таймер, либо непосредственно перед метод invalidate возвращает или при некотором позже точка. После признания недействительным таймер объекты нельзя использовать повторно.

Я считаю, NSTimer не блокирует поток пользовательского интерфейса. Также взгляните на этот предыдущий вопрос SO NSTimer и обновление интерфейса пользователя

...