我想在PDF 創建的頁面預覽圖像,但我有一些問題,釋放內存。UIGraphicsGetImageFromCurrentImageContext內存泄漏預覽
我寫了一個簡單的測試算法的問題週期, 附近的第40次迭代應用程序崩潰:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *pdfPath = [documentsDirectory stringByAppendingPathComponent:@"myPdf.pdf"];
CFURLRef url = CFURLCreateWithFileSystemPath(NULL, (CFStringRef)pdfPath, kCFURLPOSIXPathStyle, NO);
CGPDFDocumentRef myPdf = CGPDFDocumentCreateWithURL(url);
CFRelease (url);
CGPDFPageRef page = CGPDFDocumentGetPage(myPdf, 1);
int i=0;
while(i < 1000){
UIGraphicsBeginImageContext(CGSizeMake(768,1024));
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor(context, 1.0,1.0,1.0,1.0);
CGContextFillRect(context,CGRectMake(0, 0, 768, 1024));
CGContextSaveGState(context);
CGContextTranslateCTM(context, 0.0, 1024);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawPDFPage(context, page);
CGContextRestoreGState(context);
// --------------------------
// The problem is here (without this line the application doesn't crash)
UIImageView *backgroundImageView1 = [[UIImageView alloc] initWithImage:UIGraphicsGetImageFromCurrentImageContext()];
// --------------------------
UIGraphicsEndImageContext();
[backgroundImageView1 release];
NSLog(@"Loop: %d", i++);
}
CGPDFDocumentRelease(myPdf);
上述線似乎然而,以生成存儲器泄漏, ,儀器不顯示內存問題;
我可以從這種錯誤的逃生?有人可以解釋我以何種方式? 是否有其他方式顯示PDF預覽?
UPDATE
我覺得問題不是UIImage
該方法UIGraphicsGetImageFromCurrentImageContext()
但UIImageView
這個自動釋放的形象創造了釋放所產生的釋放。
我已分割的代碼行中的三個步驟:
UIImage *myImage = UIGraphicsGetImageFromCurrentImageContext();
UIImageView *myImageView = [[UIImageView alloc] init];
[myImageView setImage: myImage]; // Memory Leak
的第一和第二線不產生內存泄漏所以我認爲該方法是UIGraphicsGetImageFromCurrentImageContext不是問題。
我也嘗試如下,但問題仍然存在:
UIImageView *myImageView = [[UIImageView alloc] initWithImage:myImage];
我覺得這是在包含有自動釋放屬性的UIImage一個UIImageView釋放內存泄漏。
我試着寫我的對象繼承的UIImageView一個UIView如本thread解釋。
此解決方案,但不是很優雅,這是一個解決辦法,我更願意使用對象的UIImageView解決內存問題。
你用什麼工具檢查內存使用情況?我會看看「分配」和「活動監視器」,它們都可以顯示泄漏工具漏掉的內存使用情況。另外,這段代碼應該做什麼呢?你想創建1000個圖像視圖,但沒有使用它們就擺脫它們? – 2011-03-21 19:38:14
你找到答案了嗎?我有同樣的問題:S – 2013-12-12 23:13:40