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