На самом деле, performSelector:withObject:afterDelay:
не обязательно должно происходить в основном потоке; Вот почему есть отдельный метод performSelectorOnMainThread:withObject:waitUntilDone:
. Документация для performSelector:withObject:afterDelay:
говорит
Вызывает метод получателя в потоке current с использованием режима по умолчанию после задержки.
Если вы хотите выполнить задачу в фоновом режиме, вы можете взглянуть на +[NSThread detachNewThreadSelector:toTarget:withObject:]
, который запустит новый поток для выполнения вашей задачи и оставит пользовательский интерфейс отзывчивым. Использование отдельного потока для выполнения длительной задачи, которая в противном случае может заблокировать ваш пользовательский интерфейс, как правило, хорошая идея, но это добавляет сложности. Если вы не знакомы с многопоточностью, у вас могут возникнуть ошибки, которые не будут иметь никакого смысла.
В комментарии выше вы упомянули, что думаете, что анимация виновата в том, что ваш пользовательский интерфейс не отвечает. Если вы используете встроенную поддержку анимации (Core Animation или одного из оберток Cocoa), анимация не должна сделать ваш пользовательский интерфейс безразличным. Не отвечающий пользовательский интерфейс обычно означает, что ваша программа выполняет большую работу в основном потоке, прежде чем позволить циклу выполнения вернуться к событиям пользовательского интерфейса службы.