У меня есть сомнения относительно правильного использования метода NSRunLoop runMode:beforeDate
.
У меня есть вторичный фоновый поток, который обрабатывает сообщения делегатов по мере их получения.
По сути, у меня есть интенсивная логика процесса, которую необходимо выполнять в фоновом потоке.
Итак, у меня есть 2 объекта, ObjectA
и AnotherObjectB
.
ObjectA
инициализирует AnotherObjectB
и говорит AnotherObjectB
начать делать свое дело. AnotherObjectB
работает асинхронно, поэтому ObjectA
действует как делегат AnotherObjectB
. Теперь код, который необходимо выполнить в сообщениях делегата, необходимо выполнить в фоновом потоке. Итак, для ObjectA
я создал NSRunLoop и сделал что-то вроде этого, чтобы настроить цикл выполнения:
do {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
} while (aCondition);
Где aCondition
устанавливается где-то в «сообщении делегата о завершении».
Я получаю все сообщения делегатов, и они обрабатываются в этом фоновом потоке.
У меня вопрос: правильный ли это подход?
Причина, по которой я спрашиваю об этом, заключается в том, что [NSDate distantFuture]
— это дата, охватывающая пару столетий. Таким образом, runLoop не истечет время ожидания до «distantFuture» — до тех пор я определенно не буду использовать свой Mac или эту версию iOS. >_‹
Однако я не хочу, чтобы цикл выполнения работал так долго. Я хочу, чтобы цикл выполнения выполнялся, как только вызывается мое последнее сообщение делегата, чтобы он мог правильно выйти.
Кроме того, я знаю, что могу установить повторяющиеся таймеры с более короткими интервалами, но это не самый эффективный способ, поскольку он сродни опросу. Вместо этого я хочу, чтобы поток работал только тогда, когда приходят сообщения делегата, и спал, когда сообщений нет. Итак, подход, который я использую, правильный, или есть какой-то другой способ сделать это. Я прочитал документы и руководство и настроил это на основе того, что понял из них.
Однако, если вы не совсем уверены, лучше всего обратиться к этому удивительному сообществу за мнением и подтверждением.
Итак, заранее спасибо за всю вашу помощь!
Ваше здоровье!