【问题标题】:Why is CGContextRef not an object?为什么 CGContextRef 不是对象?
【发布时间】:2011-09-23 07:59:11
【问题描述】:

如果 CGContextRef 是一个实际的对象,会不会更有意义? 现在,每次您想添加路径时,您都需要为其提供上下文。 是不是更好说: [上下文添加路径:我的路径]; 代替 CGContextAddPath(context,myPath);

这是一个结构还是这里的交易? 有人愿意详细说明吗?

【问题讨论】:

  • CoreGrahics 是用 C 语言编写的,它周围没有 Objective-C 层。所以欢迎使用纯 C 和这些 CG...Ref 只是一个指针。
  • 当您使用 UIBezierPath、UIColor、.. 时,您可以使用内置函数进行上下文操作,例如 [UIColor setFill][UIBezierPath setClip][UIBezierPath fill]、........跨度>

标签: objective-c core-graphics cgcontext


【解决方案1】:

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

正如 Martin Ullrich 所提到的,有一些 Objective-C 封装了一些 Core Graphics 的东西,但是在使用 Objective-C 的东西之前了解“幕后”发生的事情真的要好得多(这将是更容易,但速度稍慢)。

顺便说一句,我所说的这种缓慢只有在您进行大量绘图并且您希望(或需要)保持良好的 FPS/响应能力时才是真正的问题。例如,如果您要绘制数百种形状和线条,您可能希望直接使用 CG。如果您只是绘制少量形状/图像/文本,则使用 Obj-C 包装器只会对性能造成微不足道的影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 2014-10-09
    • 2020-09-08
    相关资源
    最近更新 更多