在我的iOS应用程序中,我使用UIScrollView和UIPageControl来显示三个不同时间段的CPTXYGraph图,即一个显示最近30天的数据,下一个显示最近90天的数据,第三个显示最近六个月的数据。

即上个月

最近90

等等

UIScrollView和UIPageControll的组合使我可以加载每个图形,然后让用户在图形之间滑动以查看不同的时间段。

在我尝试使我的应用程序成为通用应用程序并尝试在iPad上运行之前,一切都运转良好。当我旋转iPad时,应用程序将崩溃并导致iPad进行软重置。当连接调试器时,iPad会在崩溃前报告内存不足警告。

我发现在CPTGraphHostingView上设置CollapseLayers = true,然后可以在iPad上运行该应用程序而不会崩溃,但是在其他页面上加载额外的图形要比在iPhone上慢几个数量级。当然,我使用的是iPhone 5s和iPad3,但我没想到像我看到的那样如此缓慢。

感到困惑的是,我仍然使用CollapseLayers = true将该应用程序重新加载到iPhone上,并注意到iPhone也显着降低了水平图的加载速度。请参见下面的乐器截图

首先使用CollapseLayers = false

秒,CollapseLayers = true

在每次捕获中,我都在iPhone上进行相同数量的“工作”,启动应用程序,然后旋转。请注意,当CollapseLayers = true时,CPU以100%所花费的时间比CollapseLayers = false时要长得多,但是内存使用量要少得多,大约为38MB与199MB。

有关如何减少内存使用量(因此不需要设置CollapseLayers = true)或如何通过CollapseLayers = true改善性能的建议?

更新

我找到了讨论该主题的讨论:

https://groups.google.com/forum/m/#!topic/coreplot-discuss/LqMJEPyuR1o

从帖子

渲染速度受CPU限制,因此不幸的是,更高的分辨率需要4倍的工作量,这就是您所看到的。

这至少可以解释为什么我在iPad3和iPhone上看到如此高的性能。

试图从我的图表中删除主题,并让CollapseLayers = false,不幸的是,这仍然使iPad崩溃。

最佳答案

设置collapsesLayers = YES告诉Core Plot将整个图形绘制到单个Core Animation层中,而不是对所有各种元素(轴,图,标签等)使用单独的层。这样可以减少内存使用量,但是如果发生任何更改,则迫使整个图形重新绘制,而不仅仅是重新绘制已更改的部分。创建图形后,请确保该图形不会多次重绘。请记住,对图形或托管视图的任何更改都将迫使其在显示后重新绘制。

关于ios - 当CollapseLayers = true时,iOS中的核心绘图性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21923675/

10-12 19:34