Рисование UIKit является потокобезопасным: как получить графический контекст?

Итак, как упоминалось в этом ответеи в примечаниях к выпуску iOS 4.0, UIKit теперь имеет некоторые потокобезопасные средства рисования:

Рисование в графический контекст в UIKit теперь является потокобезопасным. В частности:

  • Подпрограммы, используемые для доступа к графическому контексту и управления им, теперь могут корректно обрабатывать контексты, находящиеся в разных потоках.
  • Рисование строк и изображений теперь ориентировано на многопотоковое исполнение.
  • Использование объектов цвета и шрифта в нескольких потоках теперь безопасно.

Это здорово, но как этим пользоваться?

Насколько мне известно, в любое время, когда вы не находитесь внутри -drawRect:вы можете рисовать, используя материал UIKit/UIGraphics, только если вы создали свой собственный контекст через UIGraphicsBeginImageContext ()или UIGraphicsPushContext(), но согласно документации эти функции не являются потокобезопасными, а -drawRect()всегда вызывается в основном потоке.

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

Итак, как мне использовать этот многопоточный материал для рисования на основе UIKit, который был представлен в iOS 4? Какие еще способы получения активного графического контекста UIKit я пропустил?

П.С. Я знаю, что могу просто рисовать с помощью Core Graphics и покончить с этим. По разным причинам (устаревший код) я хотел бы продолжать использовать методы рисования на основе UIKit.

9
задан Community 23 May 2017 в 12:31
поделиться