Кварцевый рисунок во время прокрутки

У меня есть подкласс UIView, который я рисую на нем.

<Сильный> GraphingView.h

@interface GraphingView : UIView
...
@end

Я рисую вещи здесь:

<Сильный> GraphingView.m

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

Затем, с другого контроллера, я вызываю этот график, просто инициализируя и добавляя, что subview

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

Но я на самом деле называю это subview несколько раз с UIScrollView на разных страницах. Скажем, 3 страницы для 3 разных графиков. Все работает нормально, если мне просто нужно 3 статических графика. Из-за моего скроллера бесконечно, каждый раз, когда я прокручиваю скроллер влево или вправо, скроллер генерирует более старый или более новый график, который сидит на предыдущем или рядом с графиком направления. По этой причине я использую scrollViewDidScroll для обнаружения и вставки нового графика. Тем не менее, scrollViewDidScroll делает слишком много вызовов в subviews, так как он не был остановлен. Таким образом, это означает, что я повторно рисую слишком много с Quartz 2D, и это приводит к сбою приложения. Это звучит утечка памяти из кварца?

В этом случае я решил вместо этого вызвать подструктуру графика в scrollViewDidEndDecelerating . Но через какое-то время прокрутка приложения вылетает так же, как и выше, так как я все еще вызываю subview с методом drawRect слишком много раз.

Мой вопрос: как я могу предотвратить сбой этого кварца, потому что drawRect вызывается больше, чем должно быть?

0

1 ответы

Утечка памяти вызвана sqlite3 на самом деле, потому что я запрашиваю данные в каждом графическом представлении.

There is an outstanding article for those who deals with memory leak which I highly recommend When is a Leak not a Leak? Using Heapshot Analysis to Find Undesirable Memory Growth

0
добавлено