2010-07-06 2 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 в течение цикла

CGPDFDocumentRef PDF = CGPDFDocumentCreateWithURL ((CFURLRef) URL); Эти линии дают мне утечку памяти. Пожалуйста, помогите мне. Thanx in advanced

ответ

2

Из руководства CGPDFDocumentCreateWithURL: «Вы несете ответственность за освобождение объекта с помощью CGPDFDocumentRelease».

Так что вам нужно позвонить

CGPDFDocumentRelease(pdf)
, когда вы закончите. Общее соглашение методов CG заключается в том, что если имя содержит Create, тогда будет соответствующий метод Release, который вы должны вызвать.

+0

Он генерирует ошибку bad accees – user373017

+0

Где вы добавляете это? – taskinoor

+0

i после этого UIGraphicsEndPDFContext(); UIGraphicsEndImageContext(); 2 линии – user373017

2

Не используйте метод CGPDFPageRelease(page), так как страница получена с использованием метода get. вместо этого замените этот вызов taskinoor'sCGPDFDocumentRelease(pdf), и вам должно быть хорошо идти.

+0

Хорошая точка! благодаря – Claudio

Смежные вопросы