Это может быть действительно глупый вопрос, но может ли кто-нибудь сказать мне разницу между созданием CGContextRef с использованием UIGraphicsBeginImageContext и использованием CGBitmapContextCreate для рисования на изображения? Особенно сейчас, поскольку чертеж UIKit является потокобезопасным, мне было интересно, есть ли какая-нибудь причина использовать CGBitmapContextCreate над UIGraphicsBeginImageContext.
UIGraphicsBeginImageContext vs CGBitmapContextCreate на iOS
Ответ 1
В соответствии с 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.