Что такое runloop? - PullRequest
       10

Что такое runloop?

19 голосов
/ 09 февраля 2011

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

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

Кто-нибудь, кто мог бы попытаться объяснить это?

Спасибо.

Ответы [ 2 ]

29 голосов
/ 09 февраля 2011

Эффективный цикл выполнения:

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

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

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

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

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

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

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

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

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

13 голосов
/ 09 февраля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...