在我的 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 在加载水平图时也明显减慢了速度。请参阅下面的 Instruments 捕获
首先使用 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 层中,而不是为所有各种元素(轴、绘图)使用单独的层、标签等)。这减少了内存使用,但如果有任何变化,则强制整个图形重绘,而不是仅仅重绘发生变化的部分。确保图表在创建后没有多次重绘。请记住,对图表的任何更改或托管 View 将强制它在显示后重新绘制。
关于ios - CollapseLayers = true 时 iOS 中的核心绘图性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21923675/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |