2011-09-23 79 views
1

如果CGContextRef是一个实际的对象,它会更有意义吗? 现在你需要给它的上下文,每次你想添加一个路径。 说: [context addPath:myPath]; 而不是 CGContextAddPath(context,myPath);为什么CGContextRef不是一个对象?

这是一个结构或什么是交易在这里? 任何关心详细说明?

+0

CoreGrahics是用C语言编写的,它周围没有Objective-C层。所以欢迎来到纯C和每个CG ... Ref只是一个指针。 – Tom

+1

当你使用UIBezierPath,UIColor,..你可以使用内建函数进行上下文操作,如'[UIColor setFill]','[UIBezierPath setClip]','[UIBezierPath fill]',........ –

回答

4

从程序员的角度来看,这可能会更容易一点,但它在C中的部分原因是性能。在执行图形密集型代码时,渲染时间很重要(几乎总是),最后要做的就是分配大量的临时对象。这是一个折衷 - 可读性/可维护性的表现。

正如Martin Ullrich所提到的,围绕着一些Core Graphics的东西有一些Objective-C的包装器,但是在使用Objective-C的东西之前知道“底层”是怎么回事真的好多了。更容易,但稍慢)。

顺便说一句,当你进行大量绘图时,我所说的这种缓慢只是一个问题,而且你希望(或需要)保持FPS /响应能力非常好。例如,如果您正在绘制数百个形状和线条,则需要直接使用CG。如果你只是绘制一些形状/图像/文本,使用Obj-C包装将只给予可忽略的性能影响。

相关问题