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