Посмотрите на главу "Run Loops" Руководства по программированию потоков от Apple. Вкратце:
- С каждым потоком связан один цикл выполнения.
- Цикл выполнения должен быть запущен, чтобы делать что-либо.Основная функция приложения Apple позаботится об этом для вас в главном потоке.
- Цикл выполнения выполняется в определенном режиме.«Общий режим» на самом деле представляет собой набор режимов, и есть API для добавления режимов к этому набору.
- Основное назначение цикла выполнения - мониторинг таймеров и запуск источников цикла.Каждый источник зарегистрирован в определенном цикле выполнения для определенного режима и будет проверяться только в соответствующее время, когда цикл запуска работает в этом режиме.
- Цикл выполнения проходит несколько этапов в каждом обходецикл, такой как проверка таймеров и проверка других источников событий.Если он обнаруживает, что любой источник готов к запуску, он запускает соответствующий обратный вызов.
- Помимо использования готовых инструментов цикла выполнения, вы можете создавать свои собственные источники цикла выполнения, а также регистрировать наблюдателя цикла выполнения дляотслеживать ход цикла выполнения.
Одна из основных ловушек заключается в том, что вы забыли запустить цикл выполнения, ожидая обратного вызова из источника цикла выполнения.Это иногда является проблемой, когда вы решаете заняться - ждать, когда что-то произойдет в главном потоке, но вы, скорее всего, столкнетесь с ним, когда создадите свой собственный поток и зарегистрируете источник runloop с этим runloop.Вы несете ответственность за создание пула автоматического выпуска и запуска runloop, если это необходимо, в неосновных потоках, поскольку основная функция приложения не будет там делать это для вас.
Вы бы лучше прочитали Apple Руководство по программированию параллелизма вместо этого, которое предлагает альтернативы механизму runloop, такие как очереди операций и источники отправки.В разделе «Замена кода выполнения цикла» главы «Перенос из потоков» предлагается использовать источники диспетчеризации вместо источников цикла выполнения для обработки событий.