drawRect的性能

时间:2012-06-28 13:55:25

标签: iphone ios drawrect

嘿,大家只是一个关于drawRect:表现的快速问题,因为我注意到很多人都抱怨性能问题。

在我的应用程序中,我需要在一些底层视图上绘制~150个方块。显然,这么多电话不会有明显的用户差异,但我只是想知道未来的利弊。目前我正在讨论两种方式:

1)在顶部添加一个透明的UIView子类,并使用自定义drawRect:来方便绘图

2)只需添加正常的方形子视图

正如我所说,使用CADisplayLink对用户没有任何区别,我只是好奇什么会更有效率? (2)有点荒谬的做法,只为外观添加无用功能的实例,但所有这些帖子都让我害怕使用drawRectdrawRect真的效率低吗?

由于

1 个答案:

答案 0 :(得分:3)

也许不直观,drawRect:并不是每一帧都被调用。实际上,如果您在视图中没有做任何特殊操作,并且您的视图本身不会更改,则会调用一次。

您可以通过调用[myView setNeedsDisplay]强制调用它,但通常没有理由。

如果您的视图包含重叠的子视图,那么对于每个视图(包括超级视图),drawRect:只会被调用一次。然后,GPU进行合成(混合)。

自定义drawRect:几乎总是比仅仅按照预期的方式使用UIKit更慢(也更难),如果UIKit已经提供了您想要做的事情。

也不要陷入软件开发中最大的陷阱之一,过早优化。编写最天真的版本,对其进行基准测试,如果速度足够快,那就足够了,你可以将精力集中在其他地方。一旦你知道 某些东西实际上很慢,其中为什么,就开始优化。