性能方面:很多小型PNG或一个大型PNG?

Kri*_*iem 5 iphone graphics performance

为iPhone开发一款简单的游戏,能带来更好的表现吗?

  1. 为我的UIViews背景使用了很多小的(10x10到​​30x30像素)PNG.
  2. 使用一个大的PNG并剪切到我的UIViews的边界.

我的想法是,第一种技术需要更少的内存,每个UIView,但复杂的iPhone如何处理大量的图像,因为它试图将图像组合成一个更大的纹理或试图在所有小纹理之间切换很多.

另一方面,第二种技术让iPhone有机会处理一个大的PNG,但是每个UIView必须携带的图像重量会增加.

  • 我对iPhone的尝试是否正确,按照我描述的方式处理图像?
  • 那么,要走的路是什么?

看到目前为止的答案,仍有疑问.似乎需要权衡两个参数:复杂性和CPU密集型编码.决定使用什么技术的我的转折点是什么?

dun*_*cox 7

如果您最终引用相同的CGImageRef(例如通过共享UIImage*),则不同视图将不会多次加载图像.这是视频墙核心动画演示在WWDC 07主题演讲中使用的技术.这是OSX代码,但UIViews与CALayers非常相似.

Core Graphics处理图像的方式(无论如何我的观察)都经过大量调整,以便在内存紧张时进行即时加载和积极释放.

如果CGImageRef指向的解码图像的内存已被系统回收,则使用大图像最终可能会在绘制时加载图像.

有什么区别不是你有多少张图片,而是UIKit遍历你的代码的频率.

UIViews和Core Animation CALayers只会在你问到(-setNeedsDisplay)时重新绘制,而瓶颈通常是你的代码加上将渲染的内容转移到图形芯片的纹理中.

因此,我的建议是以允许一起更改的部分同时更新的方式来考虑您的UIView布局,这将变成单个纹理上载.