我有一个 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
被调用的次数超过它应该的次数而崩溃?