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 メソッドを持つサブビューを何度も呼び出すため、アプリは上記のようにクラッシュします。

drawRect私の質問は、必要以上に呼び出されているために、この Quartz がクラッシュするのを防ぐにはどうすればよいですか?

4

1 に答える 1

0

メモリリークは、実際にはすべてのグラフビューでデータをクエリするためにsqlite3が原因で発生します。

私が強くお勧めするメモリリークを扱っている人のための優れた記事があります。リークはリークではないのはいつですか?ヒープショット分析を使用して、望ましくないメモリの増加を見つける

于 2013-02-07T16:38:42.507 に答える