Итак, как упоминалось в этом ответеи в примечаниях к выпуску iOS 4.0, UIKit теперь имеет некоторые потокобезопасные средства рисования:
Рисование в графический контекст в UIKit теперь является потокобезопасным. В частности:
- Подпрограммы, используемые для доступа к графическому контексту и управления им, теперь могут корректно обрабатывать контексты, находящиеся в разных потоках.
- Рисование строк и изображений теперь ориентировано на многопотоковое исполнение.
- Использование объектов цвета и шрифта в нескольких потоках теперь безопасно.
Это здорово, но как этим пользоваться?
Насколько мне известно, в любое время, когда вы не находитесь внутри -drawRect:
вы можете рисовать, используя материал UIKit/UIGraphics, только если вы создали свой собственный контекст через UIGraphicsBeginImageContext ()
или UIGraphicsPushContext()
, но согласно документации эти функции не являются потокобезопасными, а -drawRect()
всегда вызывается в основном потоке.
Я предполагаю, что создание контекста изображения в основном потоке, а затем запуск фонового метода было бы действительно плохой идеей из-за большого количества условий гонки.
Итак, как мне использовать этот многопоточный материал для рисования на основе UIKit, который был представлен в iOS 4? Какие еще способы получения активного графического контекста UIKit я пропустил?
П.С. Я знаю, что могу просто рисовать с помощью Core Graphics и покончить с этим. По разным причинам (устаревший код) я хотел бы продолжать использовать методы рисования на основе UIKit.