0

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

GraphingView.h

@interface GraphingView : UIView
...
@end

我在这里画东西:

GraphingView.m

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

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

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

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

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

我的问题是,我如何防止这个 Quartz 因为drawRect被调用的次数超过它应该的次数而崩溃?

4

1 回答 1

0

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

对于那些处理内存泄漏的人来说,有一篇出色的文章我强烈推荐什么时候泄漏不是泄漏?使用 Heapshot 分析发现不希望的内存增长

于 2013-02-07T16:38:42.507 回答