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

Что такое runloop?

После прочтения документации для NSRunLoop я не очень понял. Я создаю дополнительный поток, в котором есть NSTimer, который запускается каждые 1 сек. Какие обновления метки на экране с помощью performSelectorOnMainThread..

Однако, чтобы заставить его работать, мне нужна была runloop, но я не понимаю ее концепции?

Любой, кто мог бы это объяснить?

Спасибо.

4b9b3361

Ответ 1

Эффект цикла запуска:

while(... get an event ...)
    ... handle event ...;

Он работает в потоке; основной поток имеет основной цикл событий, в котором обрабатываются пользовательские события, и большинство рисунков пользовательского интерфейса и т.д. Документация подробно объясняет это.

Однако в вашем случае вам не нужен поток.

Похоже, что все, что вы делаете, периодически обновляет ярлык в пользовательском интерфейсе; то, что не очень интенсивно вычисляется.

Просто планируйте свой таймер в основном потоке и выполняйте его. Нет необходимости в создании потока, используя performSelectorOnMainThread:, или нести все сложности обеспечения согласованности данных по потокам.


Извините - не понял ваш вопрос.

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

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

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

Ответ 2

Эта страница объясняет это довольно хорошо. FTA:

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