2010-08-23 72 views
0

我一直在做研究,因为我的PDF阅读器应用程序可以使因为发生这种情况每次打开页面时内存韭菜4/5页面各处崩溃......iphone CGPDFDocumentRef巨大的内存韭菜

事实证明,苹果有一个错误。

在这里看到:https://devforums.apple.com/message/9077#9077

从我的理解,你必须释放&每次更改页面时保留了PDF文档。

,但我不能让它工作(此代码是的UIView的子类):

- (void) drawInContext: (CGContextRef) ctx { 
CGPDFDocumentRelease(__pdfDoc); 
CGContextSetRGBFillColor(ctx, 1.0, 1.0, 1.0, 1.0); 
CGContextFillRect(ctx, CGContextGetClipBoundingBox(ctx)); 
CGContextTranslateCTM(ctx, 0.0, self.bounds.size.height); 
CGContextScaleCTM(ctx, 1.0, -1.0); 
CGContextConcatCTM(ctx, CGPDFPageGetDrawingTransform(pdfPage, kCGPDFCropBox, self.bounds, 0, true)); 
CGContextDrawPDFPage(ctx, pdfPage);NSLog(@"DONE!"); 
CGPDFDocumentRetain(__pdfDoc);} 
@end 

我的PDF是这里有一个的viewController:

- (CGPDFPageRef) pdfPage: (NSInteger) index { 
if(! __pdfDoc) { 
__pdfDoc = CGPDFDocumentCreateWithURL((CFURLRef)[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"mybook" ofType:@"pdf"]]);} 
if(__pdfDoc) { 
size_t pdfPageCount = CGPDFDocumentGetNumberOfPages(__pdfDoc); 
index++; 
if(index < 1) 
index = 1; 
if(index > pdfPageCount) 
index = pdfPageCount; 
CGPDFPageRef page = CGPDFDocumentGetPage(__pdfDoc, index); 
return page;} 
return nil;} 

我可以”在Google上找到任何东西,我一整天都在阅读文档。

任何想法?

回答

0

是的。错误。绘制页面时,必须打开/关闭整个文档。吮吸。

(我认为这是固定在3.2.x中)

+0

如何????我看不到任何信息 – user422241 2010-08-23 20:57:46

+0

即将下载SDK 4.0我会告诉你,如果错误是固定的 – user422241 2010-08-23 22:23:55

+0

哇 - 这是最近的一篇文章吗?但你可能是对的。 Afaik没有Create:s等等,表明它在绘制页面时的所有权 - 我想所有的内存在逐页绘制的时候都被“挂在”原始文档引用上(它实际上包含了Create,CGPDFDocumentCreateWithURL这个词,它会表明所有权)?无论如何,如果你从未获得过它们的唯一所有权,你将如何能够释放不再需要的页面的内存? – Jonny 2010-08-30 16:09:15