我有一个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
被调用的次数超过应有的数量?
答案 0 :(得分:0)
内存泄漏是由sqlite3引起的,因为我在每个图表视图中查询数据。
对于那些处理内存泄漏问题的人,我强烈推荐When is a Leak not a Leak? Using Heapshot Analysis to Find Undesirable Memory Growth