グラフを描画する 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 メソッドを持つサブビューを何度も呼び出すため、アプリは上記のようにクラッシュします。
drawRect
私の質問は、必要以上に呼び出されているために、この Quartz がクラッシュするのを防ぐにはどうすればよいですか?