开发者

pdf object creating memory leak

开发者 https://www.devze.com 2023-01-06 00:46 出处:网络
I have following code NSString *filePath=[[NSString alloc] initWithString:[[NSBundle mainBundle] pathForResource:pdfname ofType:@\"pdf\" inDirectory:@\"appMasterPdf\"]];

I have following code

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,
                                                              kCGPDFBleed开发者_C百科Box, 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;

This function is acalling in for loop

CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef)url); These lines give me a memory leaks. Please help me . Thanx in advanced


From the manual of CGPDFDocumentCreateWithURL, "You are responsible for releasing the object using CGPDFDocumentRelease."

So you need to call

CGPDFDocumentRelease(pdf)
when you are done. The general convention of CG methods is that if the name contains Create then there will be a corresponding Release method which you must call.


You should not call CGPDFPageRelease(page) method since the page is obtained using a get method. instead, replace that call with taskinoor's CGPDFDocumentRelease(pdf) and you should be good to go.

0

精彩评论

暂无评论...
验证码 换一张
取 消