2011-01-07 5 views
3

Это приложение для журнала 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; 

}

ответ

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