2010-07-06 95 views
2

我有以下代码PDF对象产生存储器泄漏

NSString *filePath=[[NSString alloc] initWithString:[[NSBundle mainBundle] pathForResource:pdfname ofType:@"pdf" inDirectory:@"appMasterPdf"]]; 
NSURL *url = [NSURL fileURLWithPath:filePath]; 
[filePath release]; 

CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef)url); 
CGFloat scaleRatio; 
UIGraphicsBeginImageContext(CGSizeMake(width, height)); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGPDFPageRef page = CGPDFDocumentGetPage(pdf, pageNumber); 
pageRect = CGPDFPageGetBoxRect(page, kCGPDFBleedBox); 
width=pageRect.size.width; 
height=pageRect.size.height; 
if(pageRect.size.width/pageRect.size.height < 1.0) { 
    scaleRatio = height/pageRect.size.height; 
} 
else { 
    scaleRatio = width/pageRect.size.width; 
} 

CGFloat xOffset = 0.0; 
CGFloat yOffset = height; 
if(pageRect.size.width*scaleRatio<width) { 
    xOffset = (width/2)-(pageRect.size.width*scaleRatio/2); 
} 
else { 
    yOffset = height-((height/2)-(pageRect.size.height*scaleRatio/2)); 
} 

CGContextTranslateCTM(context, xOffset, yOffset); 
CGContextScaleCTM(context, 1.0, -1.0); 
CGContextSaveGState(context); 
CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(page, 
                   kCGPDFBleedBox, CGRectMake(0, 0, pageRect.size.width, pageRect.size.height), 
                   0, true); 
pdfTransform = CGAffineTransformScale(pdfTransform, scaleRatio, scaleRatio); 
CGContextConcatCTM(context, pdfTransform); 
CGContextDrawPDFPage(context, page); 
UIImage *tempImage = UIGraphicsGetImageFromCurrentImageContext(); 
CGContextRestoreGState(context); 
UIGraphicsEndPDFContext(); 
UIGraphicsEndImageContext(); 

CGContextRelease(context); 
CGPDFPageRelease(page); 
return tempImage; 

该功能acalling在for循环

CGPDFDocumentRef PDF = CGPDFDocumentCreateWithURL((CFURLRef)URL); 这些行给我一个内存泄漏。 请帮帮我。先进的Thanx

回答

2

从CGPDFDocumentCreateWithURL手册中,“您负责使用CGPDFDocumentRelease释放对象。”

所以当你完成后你需要拨打

CGPDFDocumentRelease(pdf)
。 CG方法的一般约定是,如果名称包含Create,则会有相应的Release方法,您必须调用它。

+0

它生成错误加密 – user373017 2010-07-06 10:02:55

+0

你在哪里添加这个? – taskinoor 2010-07-06 11:02:11

+0

此后添加 UIGraphicsEndPDFContext(); UIGraphicsEndImageContext(); 2行 – user373017 2010-07-06 13:24:44

2

由于使用get方法获取页面,因此不应该调用CGPDFPageRelease(page)方法。相反,用taskinoor'sCGPDFDocumentRelease(pdf)取代那个电话,你应该很好走。

+0

好点!谢谢 – Claudio 2017-01-25 16:34:29