Iphone 即使未调用drawRect,它也会导致缓慢滚动

Iphone 即使未调用drawRect,它也会导致缓慢滚动,iphone,objective-c,ios,cocoa-touch,drawrect,Iphone,Objective C,Ios,Cocoa Touch,Drawrect,在我的应用程序中,我有一个滚动视图,其中包含大约20个子视图。每个子视图都有一个drawRect方法,目前看起来如下所示: - (void)drawRect:(CGRect)rect { NSLog(@"drawRect called"); } 添加子视图时,会调用drawRect,但是当我滚动时,它会非常慢,即使不再调用drawRect 如果我删除了drawRect的实现,那么滚动是完全正常的。即使我无法摆脱缓慢的滚动,是否有一种替代drawRect的方法可以替代它?如果drawRe

在我的应用程序中,我有一个滚动视图,其中包含大约20个子视图。每个子视图都有一个drawRect方法,目前看起来如下所示:

- (void)drawRect:(CGRect)rect
{
    NSLog(@"drawRect called");
}
添加子视图时,会调用drawRect,但是当我滚动时,它会非常慢,即使不再调用drawRect


如果我删除了drawRect的实现,那么滚动是完全正常的。即使我无法摆脱缓慢的滚动,是否有一种替代drawRect的方法可以替代它?

如果drawRect只是记录调用它的情况,为什么还要调用它?如果这是你唯一的目的,那就别叫它。事实上,我相信,当您第一次创建一个从UIView继承的类时,该类中包含drawRect方法,它被注释掉,并且在注释掉的drawRect方法之上,它说了一些类似于“如果它不在屏幕上进行任何绘制,则不要调用该方法,因为它占用了大量内存”。基本上,在你的情况下不要这么说


希望这能有所帮助。

您可以在视图首次出现之前,尝试将预绘制的CGImage分配给每个自定义视图的CALayer的内容。这可能比使用drawRect自定义视图的外观更快。

在滚动过程中是否添加了子视图?在滚动期间调用NSLog肯定会导致滚动速度变慢。另外,如果您正在进行性能调优,通常避免在滚动时分配内容。@nielsbot但他没有在代码中分配任何内容;他只是在记录文本。你把子视图设置为不透明了吗?@qegal注意到。。虽然我指的是他可能会分配子视图以放置在scroll上的scroll视图中,这也是一般建议。+1。确切的警告文本是:“仅覆盖drawRect:如果执行自定义绘图。空实现会对动画期间的性能产生不利影响。”是的。您是否通过不使用drawRect来修复它?我现在只有一个空的drawRect实现,因为我想确保它不是我在drawRect方法中做错了什么导致了速度减慢。这就是我把电话记录下来的唯一原因。如果问题不清楚,很抱歉。drawRect方法已经导致了相当大的速度减慢,即使实现为空,这就是为什么我想知道是否有更好的方法在UIView中绘制。如果滚动已经很慢,即使是一个空的实现,那么我不想用它来绘图。我现在只有drawRect方法为空,以表明不是drawRect中正在执行的代码导致了缓慢的滚动,而是drawRect方法本身。@CiaranLawlor我也有同样的问题。你找到使用它的解决方案了吗?