【发布时间】:2012-06-19 12:31:21
【问题描述】:
我的应用中有一个自定义视图(继承自 UIView)。自定义视图覆盖
- (void) drawRect:(CGRect) rect
问题是:drawRect: 在 iPad 3 上的执行时间比在 iPad 2 上长很多倍(在 iPad 3 上大约 0.1 秒,在 iPad 2 上大约 0.003 秒)。它慢了大约 30 倍。
基本上,我使用一些预先创建的图层并将它们绘制在drawRect: 中。最后一次通话
CGContextDrawLayerAtPoint(context, CGPointZero, m_currentLayer);
占用大部分时间(大约占drawRect: 总时间的 95%)
是什么让事情变得如此缓慢,我应该如何解决这个原因?
更新:
没有直接涉及的线程。我确实在一个线程中调用了setNeedsDisplay:,而drawRect: 是从另一个线程调用的,仅此而已。锁也是如此(没有使用锁)。
视图被重绘以响应触摸(它是一个着色书应用程序)。在 iPad 2 上,我在触摸和屏幕更新之间得到了合理的延迟。我想在 iPad 3 上实现同样的目标。
【问题讨论】:
-
只是一个猜测,但也许您的像素数量突然增加了四倍这一事实与它有关(视网膜显示器和所有)。
-
@borrrden 我认为你是对的,在 iPad 3 上应该有很多工作要做,但整个过程已经慢了大约 30 倍。
-
我认为没有人可以仅凭这些信息进行合理的猜测。这是否使用多个线程的任何部分?互斥锁?另外,为什么这对您来说是个问题?您的视图是否经常重绘?如果是这样,为什么? DrawLayerAtPoint 可能总是最重的功能(它也在我的应用程序中,虽然我使用的是 iPad 2,所以我不能保证它在第三代的速度)。
标签: ios ipad core-graphics ipad-3