Il s'agit d'une application magazine pour ipad. Nous devons lire le PDF et le convertir en image PNG pour la vignette. Après la lecture du PDF avant la conversion, qui appelle CGContextDrawPDFPage, la mémoire augmente rapidement et ne se libère jamais jusqu'au crash. J'ai essayé de nombreuses façons mais cela ne fonctionne pas. J'apprécie vraiment si quelqu'un peut m'aider.
CGContextDrawPDFPage(context, aPage) ; //ceci est le tueur de mémoire
Voici le code complet :
-(UIImage *)image :(CGPDFPageRef)aPage rect :(CGRect)aRect { CGRect pdfcropBox = CGRectIntegral(CGPDFPageGetBoxRect(aPage, kCGPDFCropBox)) ;
if ((float)pdfcropBox.size.width/(float)pdfcropBox.size.height >
(float)aRect.size.width/(float)aRect.size.height) //pdf width too big
{
aRect.size.height = aRect.size.width * pdfcropBox.size.height / pdfcropBox.size.width;
}
//CGRect pdfcropBox = aRect;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL,aRect.size.width,
aRect.size.height,
8,
(int)aRect.size.width * 4,
colorSpace,
kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
colorSpace = nil;
CGPDFPageRetain(aPage);
CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(aPage,
kCGPDFCropBox,
CGRectMake(0, 0, aRect.size.width,aRect.size.height),
0, true);
CGContextSaveGState(context);
CGContextConcatCTM(context, pdfTransform);
CGContextDrawPDFPage(context, aPage);
CGPDFPageRelease (aPage);
aPage = nil;
CGContextRestoreGState(context);
CGImageRef image = CGBitmapContextCreateImage(context);
UIImage *resultingImage = [UIImage imageWithCGImage:image];
CGContextClearRect(context, aRect);
CGContextClearRect(context, pdfcropBox);
CGContextRelease(context);
CGImageRelease(image);
context = nil;
NSLog(@"colorSpace :%d,aPage :%d,context :%d",[colorSpace retainCount],[aPage retainCount],[context retainCount]);
return resultingImage;
}