iOS - безопасность потока и выполнениеSelectorOnMainThread - PullRequest
0 голосов
/ 10 ноября 2011

Я получил поток, выполняющий нативный код в фоновом режиме, который время от времени запускает некоторые обратные вызовы.Собственные обратные вызовы вызывают методы target-C.Для каждого вызова я в основном перерисовываю вещи или изменяю некоторые значения моих классов.Так что я получу много проблем с синхронизацией.

Можно ли решить эту проблему, вместо того, чтобы иметь блокировки, просто делая executeSelectorOnMainThread при каждом обратном вызове?Это предотвратит проблемы с синхронизацией или это слишком много взлома?

1 Ответ

1 голос
/ 10 ноября 2011

Любой рисунок должен проходить в главном потоке, поэтому потребуется что-то вроде -performSelectorOnMainThread, даже если вы используете блокировки.

Возможно, вы захотите рассмотреть использование блоков и очереди отправки для ваших обратных вызовов, как способ решения проблем синхронизации без явных блокировок. Apple Руководство по программированию параллелизма содержит много информации об использовании блоков и очередей отправки в качестве альтернативы потокам / блокировкам. Блоки и очереди реализованы на уровне C (не Objective-C), так что вы можете легко добавить их в код C (я полагаю, это то, что вы подразумеваете под "нативным"), не переписывая вещи в Objective-C.

(Обратите внимание, что при использовании блоков для обратных вызовов вам все равно нужно убедиться, что ваши операции рисования пользовательского интерфейса отправляются в основную очередь, чтобы они выполнялись в главном потоке.)

...