2010-07-06 92 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