將PDF頁轉換爲UIImages時,我總是收到內存警告。如何在Objective-C的PDF文件中生成UIImages時處理內存警告?
似乎有一些泄漏或其他東西吃我的記憶。
使用儀器沒有給我任何有用的細節。
我使用下面的函數生成一個PDF文件中的圖像:
- (UIImage*)pdfImage:(NSString*)pdfFilename page:(int)page {
CFURLRef pdfURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (CFStringRef)pdfFilename, kCFURLPOSIXPathStyle, false);
CGPDFDocumentRef pdfRef = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL);
CFRelease(pdfURL);
CGPDFPageRef pdfPage = CGPDFDocumentGetPage(pdfRef, page);
CGRect pdfPageSize = CGPDFPageGetBoxRect(pdfPage, kCGPDFBleedBox);
float pdfScale;
if (pdfPageSize.size.width < pdfPageSize.size.height) {
pdfScale = PDF_MIN_SIZE/pdfPageSize.size.width;
}
else {
pdfScale = PDF_MIN_SIZE/pdfPageSize.size.height;
}
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL,
pdfPageSize.size.width*pdfScale,
pdfPageSize.size.height*pdfScale,
8,
(int)pdfPageSize.size.width*pdfScale * 4,
colorSpace,
kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
// CGContextClipToRect(context, pdfPageView.frame);
// CGPDFPageRetain(pdfPage);
CGAffineTransform transform = aspectFit(CGPDFPageGetBoxRect(pdfPage, kCGPDFBleedBox),
CGContextGetClipBoundingBox(context));
CGContextConcatCTM(context, transform);
CGContextDrawPDFPage(context, pdfPage);
// CGPDFPageRelease (pdfPage);
CGImageRef image = CGBitmapContextCreateImage(context);
CGContextRelease(context);
UIImage *finalImage = [UIImage imageWithCGImage:image];
CGImageRelease(image);
CGPDFDocumentRelease(pdfRef);
return finalImage;
}
我釋放文件和其他一切,所以這裏可能是問題?
感謝您的幫助!
什麼是「記憶警告」,以及如何「接收」它們? – 2010-05-18 23:18:21
通過xcode中的gdb調試器控制檯接收到「內存警告」,如下所示: 2010-05-19 00:13:07.806 xx [5020:207]接收到內存警告。級別= 1 2010-05-19 00:13:10.017 xx [5020:207]接收到內存警告。級別= 2 ..並導致在該應用程序中發生內存崩潰:) – favo 2010-05-18 23:29:14