3
我的iPhone應用程序從服務器下載圖像文件,將其存儲到NSTemporaryDirectory()中,然後異步加載UI中的圖像。代碼流是這樣的:UIGraphicsGetImageFromCurrentImageContext縮放圖像的內存泄漏
- 顯示視圖與加載活動指標,並在後臺運行圖像下載。
- 圖像下載完成後,會寫入文件。
- 加載視圖中的計時器會繼續檢查臨時目錄中文件的可用性,一旦可用,就從文件加載圖像並將圖像添加到UI。
- 添加圖像之前,它會縮放到所需的大小。
問題是,我使用UIGraphicsGetImageFromCurrentImageContext來縮放圖像。看起來圖像上下文使用的內存沒有被清理。隨着更多文件被下載,應用程序內存不斷增加。
一些以下代碼:
代碼以縮放圖像:
-(UIImage*)scaleToSize:(CGSize)size image:(UIImage *)imageref
{
UIGraphicsBeginImageContext(size);
[imageref drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}
加載圖像從臨時目錄:
-(void)loadImageFromFile: (NSString *) path
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
UIImage * imm = [[[UIImage alloc] initWithContentsOfFile:path] autorelease];
[self performSelectorOnMainThread:@selector(insertImage:) withObject:imm waitUntilDone:YES];
[pool release];
}
添加圖片查看(的子集代碼):
self.imageContainer = [[UIImageView alloc] initWithFrame:CGRectMake(0,80,320,250)];
[self addSubview:self.imageContainer];
self.imageContainer.image = [self scaleToSize:CGSizeMake(320.0f, 250.0f) image:imm];
[imageContainer release];
我在這裏錯過了什麼?從UIGraphicsGetImageFromCurrentImageContext
避免泄漏的
你刪除子視圖呢?你覺得你泄漏了多少內存?也許從網上加載是你的問題?是什麼讓你認爲縮放是你的問題? – Eiko 2010-06-19 12:31:24
感謝您的回覆。進一步的調查顯示,縮放並不是真正的問題。這是UI圖像實例沒有得到清理。任何線索,爲什麼它可能是這種情況? – KSH 2010-06-21 07:49:31
你有沒有找到這個決議?我目前有同樣的問題:'UIImage'創建'UIGraphicsGetImageFromCurrentImageContext()'泄漏內存。 – MusiGenesis 2011-12-07 15:58:31