1

嘿伙计们只是一个关于性能的快速问题,drawRect:因为我注意到很多人抱怨性能问题的话题。

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

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

2)只需添加普通方形子视图

正如我所说,使用 CADisplayLink 对用户没有任何区别,我只是好奇什么会更有效?(2) 是一种荒谬的做法,添加具有无用功能的实例只是为了外观,但所有这些帖子只是吓到我使用drawRect. 真的drawRect那么低效吗?

谢谢

4

1 回答 1

3

也许不直观,drawRect:并不是每一帧都调用它。事实上,如果你在视图中没有做任何特别的事情并且你的视图本身没有改变,它就会被调用一次。

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

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

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

也不要落入软件开发中最大的陷阱之一,过早优化。编写最幼稚的版本,对其进行基准测试,如果它足够快,它就足够好,您可以将精力集中在其他地方。只有在您知道某些东西实际上很慢,以及它在哪里以及为什么慢时才开始优化。

于 2012-06-28T14:03:54.640 回答