Это приложение для журнала ipad. Нам нужно прочитать PDF и конвертировать в PNG-изображение для thumnail. После чтения PDF перед преобразованием, которое вызывает CGContextDrawPDFPage, память быстро поднимается и никогда не освобождается до сбоя. Я пытался разными способами, но это не сработало. Я очень ценю, если кто-нибудь сможет помочь.Как освободить память, созданную CGContextDrawPDFPage
CGContextDrawPDFPage (контекст, aPage); // это убийца ПАМЯТЬ
Ниже приведен полный код:
- (UIImage *) изображение: (CGPDFPageRef) aPage Прямоугольник: (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;
}