Этот вопрос касается функции -drawRect в UIView.
Настройка: Мое приложение состоит из многостраничного PDF-документа, который можно перелистывать через ScrollView с включенной подкачкой.Каждая страница (PDFDisplayView) представляет собой UIView, настроенный для использования функциональности Core Graphics CGPDF для рисования определенной страницы документа PDF.Представление прокрутки пытается оптимизировать память путем загрузки просматриваемых страниц и выгрузки неиспользуемых страниц.Загрузка страницы инициализирует UIViewController, который добавляет его представление (PDFDisplayView) в ScrollView, который вызывает функцию -drawRect функции PDFDisplayView (показанной ниже).
Тайна: Добавление представления (PDFDisplayView) к его суперпредставлению (ScrollView) вызывает функцию -drawRect, а в визуализаторе Object Allocations Object объем памяти увеличивается.Тайна в том, что, хотя -drawRect, похоже, увеличивает использование памяти, удаление представления из суперпредставления (ScrollView) при выгрузке, похоже, не уменьшает использование памяти, поскольку график визуализатора продолжает расти, а не уменьшаться.В результате использование памяти продолжает расширяться при использовании приложения, что вызывает предупреждения о памяти и возможный сбой ...
Другая информация: Я проверил все другие аспекты моего кода, чтобы убедиться, что я не теряю память в другом месте - все кажется в порядке.Это заставило меня заподозрить drawRect как виновника.Я включил код ниже.Пожалуйста, скажите мне, что вы думаете.Спасибо.
- (void)drawRect:(CGRect)rect {
CGPDFPageRef thePageRef = [[PDFReaderAppDelegate sharedAppDelegate] getPageRefForPage:self.currentPage];
if(thePageRef)
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSaveGState(ctx);
CGContextTranslateCTM(ctx, 0.0, [self bounds].size.height);
CGContextScaleCTM(ctx, 1.0, -1.0);
CGContextConcatCTM(ctx,
CGPDFPageGetDrawingTransform(thePageRef, kCGPDFCropBox,
[self bounds], 0, true));
CGContextDrawPDFPage(ctx, thePageRef);
CGContextRestoreGState(ctx);
NSLog(@"Drew PDFDisplayView of page %i (-drawRect)", self.currentPage);
}
}