【发布时间】:2013-06-01 14:10:52
【问题描述】:
问题简述
最近几周我一直在构建一个 IOS 应用程序,但遇到了一些麻烦。该应用程序通过每秒多次操作然后绘制图像光栅来播放动画。图像是通过将其分配给UIViewsCALayer 来绘制的,就像self.layer.contents = (id)pimage.CGImage; 一样,计算和渲染在两个CADisplayLinks 中分离。
这种动画技术在 iPhone 6.1 模拟器上实现了令人满意的性能,但是当它在物理设备(运行 IOS 6.1.3 的 Iphone 4s)上构建时,它会遇到明显的减速。减速是如此糟糕,以至于它实际上使应用程序无法使用。
疑似问题
我在这个问题Difference of memory organization between iOS device and iPhone simulator 中读到,允许模拟器使用比实际设备更多的内存。但是,在“仪器”中观察我的应用程序内存使用情况时,我注意到总内存使用量从未超过 3Mbs。所以我不确定这是否真的是问题,但可能值得指出。
根据这个问题,Does the iOS-Simulator use multiple cores?,IOS 模拟器运行的是英特尔芯片,而实际我的设备使用的是苹果 A5 芯片。我怀疑这也可能是放缓的原因。
我正在考虑在 Open GL 中重写动画,但是我想先尝试改进现有代码,然后再采取任何激烈的步骤。
在确定问题所在方面的任何帮助将不胜感激。
更新
感谢所有提供建议的人。 我在分析时发现主要瓶颈实际上是为下一个动画清除图像光栅。我决定用opengl重写动画的渲染。并没有预期的那么长。该应用程序现在实现了相当不错的性能水平,并且更简单一些。
【问题讨论】:
-
您是否在 beth 设备和模拟器上的仪器中运行过它?我发现在模拟器上的计算比在设备上运行得快得多,但是 openGL 风格的东西在设备上运行得更快。使用计时工具查看哪些函数占用了所有处理时间并首先关注该函数(或在此处发布,以便我们了解它为何缓慢)。
-
模拟器还充分利用了 Mac CPU 的潜力,而在真正的 iOS 设备上,您的 CPU 功能要弱得多。您已经正式发现了为什么必须在真实设备上测试应用程序。该模拟器适用于基本逻辑测试,但不适用于性能测试。
标签: ios performance memory-management ios-simulator