У меня есть рабочий поток, который я поддерживаю через цикл, управляемый флагом. Мне нужен поток, чтобы остаться в живых по длине моего приложения, так как он открывает постоянное соединение с удаленным сервером.Долговечная нить не вызывает performSelectorOnMainThread
Я запустим эту нить и вызвать несколько методов по нему:
[worker performSelector:@selector(getBusy) onThread:worker withObject:nil waitUntilDone:NO];
Это, кажется, работает хорошо, и метод. В какой-то момент в getBusy
я пытаюсь вызвать метод в основном потоке с:
[delegate performSelectorOnMainThread:@selector(gotBusy) withObject:nil waitUntilDone:NO
где делегат является ссылкой на класс, который запускает отдельный поток.
Проблема в том, что gotBusy
никогда не вызывается в основной теме. Я набросал это с помощью операторов NSLog(), и я не могу их распечатать на консоли.
Что я должен искать для отладки?
Да, основной ровный цикл спал. Ваш комментарий заставил лампочку загореться в моей голове. – ruipacheco
Отлично - обратите внимание, что вы никогда не должны блокировать или спать основной нить. Вы также должны избегать планирования большого количества мелкозернистых событий (например, таймер, который отключается каждые 1/10 секунды для опроса данных). – bbum
Это единичный тест. Я вызвал сон, когда флаг был установлен в false и не понимал, что блокирует фоновый поток от вызова основного потока. – ruipacheco