关于iOS中drawRect的问题

时间:2011-05-24 04:31:45

标签: ios memory-management drawrect

事情就是这样:我有一个视图,其中包含需要在更新相关数据后重绘的复杂内容。我使用多个视图来实现这一点,更有可能一个大视图包含多个子视图,每个子视图也可能有多个子视图。所有这些视图都覆盖了自己的drawRect:方法。

问题是复杂的视图占用大量内存,我想知道为什么drawRect:导致大量内存使用,所以我可以优化我的视图。

有人帮我一把吗?感谢。

1 个答案:

答案 0 :(得分:2)

编辑:我刚刚注意到你实际上没有说你是在谈论iOS还是Mac OS X.我认为iOS;如果它是OS X你自己就是:P为了将来参考,最好用您正在开发的操作系统或框架标记您的问题。

基本上,drawRect是处理视图最重要的内存方式。 iOS无法像通常那样优化子视图系统,因为它不知道你在做什么,因此在帧到达屏幕之前需要重新绘制多级帧缓冲区。考虑是否需要重新绘制整个视图,并认真考虑使用子视图布局系统(needsLayout:和friends)或Core Animation来执行您需要的操作。

如果你真的需要drawRect:,不要给你的视图任何子视图。子视图与drawRect不相称。您可以在所需的视图中完成所有绘图,也可以使用布局子系统或CA.

最后,去年的WWDC会议在这里提供了很好的帮助。第131节“iOS上的性能优化”和会话104“使用滚动视图设计应用程序”都讨论了UIView的性能。如果您丢失了会话,这里是会话的链接:WWDC session videos