这可能是一个非常愚蠢的问题,但有人可以告诉我使用UIGraphicsBeginImageContext创建CGContextRef和使用CGBitmapContextCreate绘制图像之间的区别吗?特别是现在因为UIKit绘图是线程安全的,我想知道是否有任何理由使用CGBitmapContextCreate而不是UIGraphicsBeginImageContext。
答案 0 :(得分:10)
根据Apple的UIKit Function Reference,其中包含2010年11月15日的封面日期,UIGraphicsBeginImageContext
和相关函数仍应仅在主线程上调用。最新的Xcode 3.2.5附带的开发人员文档中重复了相同的文本。但是,它为UIGraphicsGetCurrentContext
报告了相同的内容,我现在明确地将其理解为线程安全。我的理解是只有UIGraphicsGetCurrentContext
和UIImage,UIColor和UIFont类现在是线程安全的而不是整个UIKit,但我无法找到明确的引用。
无论如何,UIGraphicsBeginImageContext
是位于CGBitmapContextCreate
之上的UIKit包装器,并且会降低其功能。特别是您只能使用具有固定组件顺序的RGBA色彩空间图像(尽管它根据iOS版本而有所不同),并且无法为绘图指定自己的目标缓冲区。因此,例如,对于做一堆CoreGraphics组合然后将结果发布到OpenGL并且对于将已经以某种数组形式输入到CoreGraphics中的图形无用而言,它是无用的。
但是,如果UIKit方法支持您需要的功能并且使用安全,则CoreGraphics方法没有固有的优势。