嘿,大家只是一个关于drawRect:
表现的快速问题,因为我注意到很多人都抱怨性能问题。
在我的应用程序中,我需要在一些底层视图上绘制~150个方块。显然,这么多电话不会有明显的用户差异,但我只是想知道未来的利弊。目前我正在讨论两种方式:
1)在顶部添加一个透明的UIView子类,并使用自定义drawRect:
来方便绘图
2)只需添加正常的方形子视图
正如我所说,使用CADisplayLink对用户没有任何区别,我只是好奇什么会更有效率? (2)有点荒谬的做法,只为外观添加无用功能的实例,但所有这些帖子都让我害怕使用drawRect
。 drawRect
真的效率低吗?
由于
答案 0 :(得分:3)
也许不直观,drawRect:
并不是每一帧都被调用。实际上,如果您在视图中没有做任何特殊操作,并且您的视图本身不会更改,则会调用一次。
您可以通过调用[myView setNeedsDisplay]
强制调用它,但通常没有理由。
如果您的视图包含重叠的子视图,那么对于每个视图(包括超级视图),drawRect:
只会被调用一次。然后,GPU进行合成(混合)。
自定义drawRect:
几乎总是比仅仅按照预期的方式使用UIKit更慢(也更难),如果UIKit已经提供了您想要做的事情。
也不要陷入软件开发中最大的陷阱之一,过早优化。编写最天真的版本,对其进行基准测试,如果速度足够快,那就足够了,你可以将精力集中在其他地方。一旦你知道 某些东西实际上很慢,其中和为什么,就开始优化。