事情就是这样:我有一个视图,其中包含需要在更新相关数据后重绘的复杂内容。我使用多个视图来实现这一点,更有可能一个大视图包含多个子视图,每个子视图也可能有多个子视图。所有这些视图都覆盖了自己的drawRect:方法。
问题是复杂的视图占用大量内存,我想知道为什么drawRect:导致大量内存使用,所以我可以优化我的视图。
有人帮我一把吗?感谢。
答案 0 :(得分:2)
基本上,drawRect是处理视图最重要的内存方式。 iOS无法像通常那样优化子视图系统,因为它不知道你在做什么,因此在帧到达屏幕之前需要重新绘制多级帧缓冲区。考虑是否需要重新绘制整个视图,并认真考虑使用子视图布局系统(needsLayout:和friends)或Core Animation来执行您需要的操作。
如果你真的需要drawRect:,不要给你的视图任何子视图。子视图与drawRect不相称。您可以在所需的视图中完成所有绘图,也可以使用布局子系统或CA.
最后,去年的WWDC会议在这里提供了很好的帮助。第131节“iOS上的性能优化”和会话104“使用滚动视图设计应用程序”都讨论了UIView的性能。如果您丢失了会话,这里是会话的链接:WWDC session videos