Согласно справочнику Apple по UIKit , в котором указана дата покрытия 15 ноября 2010 г., UIGraphicsBeginImageContext
и связанные с ним функции должны вызываться только в основном потоке. Тот же текст повторяется в документации разработчика, которая поставляется с последней версией Xcode, 3.2.5. Тем не менее, он сообщает то же самое для UIGraphicsGetCurrentContext
, который я явно понимал как потокобезопасный сейчас. Насколько я понимаю, только UIGraphicsGetCurrentContext
и классы UIImage, UIColor и UIFont теперь являются потокобезопасными, а не полностью UIKit, но я не могу найти точную ссылку.
Независимо от того, UIGraphicsBeginImageContext
- это оболочка UIKit, которая располагается поверх CGBitmapContextCreate
и снижает ее функциональность. В частности, вы ограничены изображениями цветового пространства RGBA с фиксированным порядком компонентов (хотя это зависит от версии iOS) и не можете указать свой собственный целевой буфер для рисования. Так, например, бесполезно делать кучу композиций CoreGraphics, а затем отправлять результаты в OpenGL и бесполезно для передачи графики, которую вы уже получили в виде массива, в CoreGraphics.
Однако, когда метод UIKit поддерживает необходимую вам функциональность и безопасен в использовании, нет никаких преимуществ для методов CoreGraphics.