滚动问题时的石英绘图

时间:2013-02-07 08:18:19

标签: uiview uiscrollview quartz-graphics drawrect

我有一个UIView的子类,我在上面画了一个图。

GraphingView.h

@interface GraphingView : UIView
...
@end

我在这里画画:

GraphingView.m

- (void)drawRect:(CGRect)rect
{
...
}

然后,从另一个控制器,我通过初始化并添加该子视图来调用此图

graphView = [[GraphingView alloc] init];
...
[self.view addSubview:graphView];

但实际上我在不同的页面中使用UIScrollView多次调用此子视图。让我们说3页不同的图表。如果我只需要3个静态图表,一切正常。由于我的滚动条是无限的,每次我向左或向右滑动滚动条时,滚动条将生成一个较旧或较新的图形,它位于方向图的上方或旁边。出于这个原因,我使用scrollViewDidScroll来检测和插入新图表。但是,scrollViewDidScroll对子视图的调用过多,因为它尚未停止。所以,这意味着我使用Quartz 2D重绘太多,导致应用程序崩溃。这听起来是Quartz的内存泄漏吗?

就此而言,我决定在scrollViewDidEndDecelerating中调用图子视图。但是经过一段时间的滚动,应用程序崩溃就像上面一样,因为我仍然会调用具有drawRect方法的子视图太多次了。

我的问题是,如何防止此Quartz崩溃,因为drawRect被调用的次数超过应有的数量?

1 个答案:

答案 0 :(得分:0)

内存泄漏是由sqlite3引起的,因为我在每个图表视图中查询数据。

对于那些处理内存泄漏问题的人,我强烈推荐When is a Leak not a Leak? Using Heapshot Analysis to Find Undesirable Memory Growth