Runloop
Суть
RunLoop — цикл обработки событий, привязанный к потоку: он ждёт событие, обрабатывает его и снова засыпает, не тратя CPU. У каждого потока может быть ровно один run loop, но он не создаётся автоматически: объект появляется лениво при первом обращении к RunLoop.current, а крутится только если его явно запустить (run()). Исключение — главный поток: UIApplicationMain запускает его run loop за вас, и именно он обрабатывает тач-события, таймеры, перерисовку и колбэки DispatchQueue.main.
Источники событий:
- Input sources — асинхронные события: порты,
perform(_:on:), системные вызовы. - Timer sources —
TimerиCADisplayLink, срабатывают по расписанию, но только когда run loop в нужном режиме.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep