这个问题与UIView的-drawRect函数有关。
设置:
我的应用程序包含多页PDF文档,可以通过启用分页的ScrollView进行翻转。每个页面(PDFDisplayView)都是一个自定义的UIView,它使用Core Graphics CGPDF功能来绘制PDF文档的特定页面。 Scroll View尝试通过加载视图中的页面并卸载未使用的页面来优化内存。加载页面会初始化一个UIViewController,它将其视图(PDFDisplayView)添加到ScrollView,后者调用PDFDisplayView的-drawRect函数(如下所示)。
神秘之处:
将视图(PDFDisplayView)添加到其superview(ScrollView)调用-drawRect函数,并在Instruments Object Allocations可视化工具中,内存大小增加。问题是,尽管-drawRect似乎增加了内存使用量,但卸载时从superview(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);
}
}
答案 0 :(得分:0)
drawRect中的内存malloc将一直存在,直到您释放文档为止。定期发布和重新打开文档是我发现的唯一方法。