iPhone 在 Quartz 绘图与预烘焙图像方面的性能差异(我猜可以简化为 Quartz 与 Quartz)

标签 iphone cocoa-touch core-graphics quartz-graphics

刚接触 Quartz,我对简单形状、渐变和阴影的绘制速度感到好奇;特别将 Quartz 绘图功能与 iPhone 上的 Quartz 图像绘制进行比较。

假设我需要绘制一个填充、描边和阴影的矩形。我假设将预烘焙的矩形导入为 PNG 并使用drawInRect:或drawAtPoint:绘制它比使用Quartz的绘图函数绘制相同的东西更快,因为后者需要显式计算。另一方面,我认为绘制图像会增加内存使用和应用程序大小,因为我必须导入图像然后分配它。这听起来对吗?

除此之外,这两种技术有什么大的优点/缺点吗?作为一个非常熟悉图形程序并且刚刚接触 Quartz 的人,我试图确定在我的代码中使用绘图函数相对于预烘焙整个 UI 和导入图像是否有任何优势。

最佳答案

我有一个类似的问题,所以我超时了不同的方法。在大多数简单的绘图情况下(例如矩形示例),从磁盘加载图像似乎比绘制图像稍慢,这可能是由于需要磁盘访问。在这些情况下,我决定使用 Quartz 绘图例程,只是因为它们给我带来了灵 active 。如果我想在将来更改 UI 元素的大小(也许是为了支持更大或更高分辨率的显示),我需要重新渲染所有图像,其中矢量图将根据需要进行缩放。

我确实看到了显着性能提升的一个领域是我绘制作为背景的大径向渐变。在 Shark 中,我可以看到 CGContextDrawRadialGradient() 调用占用了大量 CPU 时间。当我用静态图像替换 quartz 绘制的径向渐变时,我发现应用程序启动时间明显减少(该背景是在应用程序启动期间放置的)。奇怪的是,我还发现应用程序内存使用量减少了约 0.5 MB,但我无法完全解释这一点。

如果您想自己测试一下,我强烈建议您选择图像编辑器 Opacity ,它可以为绘图(包括完整的 UIView 或 CALayer 子类)生成 Quartz 代码,并输出同一绘图的 PNG。这使得在应用程序中实现这两个路径并对其进行测试变得非常简单。

关于iPhone 在 Quartz 绘图与预烘焙图像方面的性能差异(我猜可以简化为 Quartz 与 Quartz),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1604341/

相关文章:

iphone - 为什么游戏开发者要将许多图像放入一张大图像中?

iphone - MBProgressHud 不随设备方向改变。?

objective-c - 你如何使用 NSDecimalNumber 获得除法的整数和模数(mod)

objective-c - 在 SplitViewController 中调整 RootViewController 的大小

ios - ACAccountStore 在设备上返回空数组,但在模拟器上工作

iphone - CGContext的垂直翻转

core-graphics - 在 NSView 上绘图

iphone - 如果函数执行时间太长,iPhone 会超时吗?

iphone - 获取地址簿 ios 5、ios 4.3 错误

ios - 在 Scrollview 的滚动条上移动 CALayer 的 mask