Первое, что касается Какао, это то, что весь код дисплея должен выполняться в главном потоке.Поэтому, если вы спрашиваете, как сообщить основному потоку, что он должен выполнить некоторую работу по отображению, performSelectorOnMainThread:waitUntilDone:
- правильный ответ.Этот метод работает путем помещения искусственного «события» в цикл выполнения основного потока (цикл, который обрабатывает события из пользовательского интерфейса, таймеров и т. Д.).Получатель вызовет метод точно так же, как если бы вы вызвали его напрямую, но это произойдет в главном потоке.
Если вы хотите сообщить другому потоку о завершении работы дисплея, вы можете сделать это синхронно, как это:
[receiver performSelectorOnMainThread: @selector(mySelector) withObject: nil waitUntilDone: YES];
Затем вызывающий поток приостанавливается до завершения метода.
Если вы просто хотите запустить и забыть, что это
[receiver performSelectorOnMainThread: @selector(mySelector) withObject: nil waitUntilDone: NO];
Шаблон является универсальнымв любой поток с помощью метода executeSelectorOnThread: withObject: waitUntilDone: .Однако, если вы сделаете это, вы должны убедиться, что целевой поток выполняет цикл выполнения .