Сколько run loop существует в iOS: один или много
Что проверяют
Точность формулировки. Ответ «один» и ответ «много» одинаково неполные, и по тому, как кандидат уточняет, видно, работал ли он с потоками или запомнил фразу из статьи.
Как отвечать
Формулировка, которая устраивает интервьюера: главный цикл в приложении ровно один, а всего их столько, сколько потоков успели о нём попросить, потому что на поток приходится не больше одного. Объект появляется по требованию, при первом обращении изнутри своего потока, и остаётся привязан к нему.
Значение RunLoop.main это обёртка над циклом главного потока. Именно он доставляет события интерфейса, поэтому его занятость и означает подтормаживание приложения.
Полезно показать устройство: цикл состоит из источников ввода, таймеров и наблюдателей, сгруппированных по режимам. Когда обрабатывать нечего, поток засыпает на ожидании сообщения и процессор не потребляет. Это и есть ответ на вопрос, чем цикл отличается от бесконечного while, который просто греет батарею.
Про уровни скажите отдельно. Тип из Foundation потокобезопасным не считается, обращаться к нему можно только из своего потока, а вариант из Core Foundation допускает остановку цикла снаружи. Где это нужно на практике: долгоживущий поток под потоки данных, разбор зависаний по стеку главного потока, работа с CADisplayLink.
Где спотыкаются
Отвечают, что цикл один на всё приложение. Единственным является главный цикл, а не цикл вообще, и следующий вопрос про фоновый поток такой ответ сразу ломает.
Второе: считают циклы по очередям. Пул потоков за очередями GCD циклы не запускает, поэтому счёт идёт по потокам, и совпадения числа очередей с числом циклов не бывает.
Третье: сохраняют ссылку на цикл и трогают её из другого потока. Так делать нельзя: для остановки чужого цикла берут функцию из Core Foundation вместе со своим флагом, а работу на чужом потоке оформляют вызовом, который сам доставится в нужный цикл.