我有以下代码
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;
此函数用于循环
CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef)url); 这些行给我一个内存泄漏。 请帮我 。 Thanx in advanced
答案 0 :(得分:2)
从CGPDFDocumentCreateWithURL手册中,“你负责使用CGPDFDocumentRelease释放对象。”
所以你需要在完成后调用
CGPDFDocumentRelease(pdf)。 CG方法的一般约定是,如果名称包含Create,那么将有一个相应的Release方法,你必须调用它。
答案 1 :(得分:2)
由于使用get方法获取页面,因此不应调用CGPDFPageRelease(page)
方法。相反,用taskinoor's CGPDFDocumentRelease(pdf)
替换该通话,你应该好好去。