Почему executeSelector: onThread: withObject: waitUntilDone: не рекомендуется для частой связи между потоками - PullRequest
2 голосов
/ 31 августа 2010

Apple Руководство по программированию потоков гласит:

Хотя хорошо для случайных связь между потоками, вы не следует использовать performSelector: onThread: withObject: waitUntilDone: метод для критичных по времени или частых связь между потоками.

Возникает вопрос: какой метод является приемлемым для частой связи между потоками, и почему executeSelector: onThread: withObject: waitUntilDone: специально не рекомендуется.

ps: Естественно, не дожидаясь завершения.

1 Ответ

3 голосов
/ 04 сентября 2010

Причина, по которой они не рекомендуют использовать это, вероятно, состоит в том, что у этого есть много накладных расходов. Также он работает только с потоками, которые работают NSRunloop. Это действительно хорошо для обновления пользовательского интерфейса из вторичного потока.

Для более тяжелой работы вы должны использовать разделяемую память (с блокировками или алгоритмами без блокировки) для связи между потоками. Или даже лучше использовать что-то вроде NSOperationQueue или Grand Central Dispatch и не беспокойтесь о том, чтобы выполнить связь и синхронизацию самостоятельно, если ваша проблема это позволяет.

...