2010-10-27 23 views
2

您好,我正在開發一個iPhone應用程序,它提供圖像和文本的信息。在每個文本有一個圖像,其可以被點擊和縮放,用一個UIImageView在iPhone上混淆內存分配錯誤

NSString* imgName = [imgPath substringToIndex:[imgPath rangeOfString:@".jpg"].location]; 
UIImage* img = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imgName ofType:@"jpg"]]; 
[imgView setImage:img]; 

示爲本人經過圖像通過由一個打開它們一個應用程序崩潰(器件調試)。在控制檯一些錯誤:

:解壓縮錯誤 my_app_name(1226,0x3e088868)malloc的:* MMAP(大小= 32768)失敗(錯誤代碼= 12) *錯誤:不能分配區域

然後:

CoreAnimation:未能分配2228352字節。

我沒有代碼泄漏,如果我不打開圖像,我不會得到錯誤。所以沒有人有這個問題的線索?

回答

1

似乎你使用的內存太多?

你打開了多少張圖片?從連接的儀器開始,觀察內存佔用情況。

請記住,圖像在加載時需要比在磁盤上壓縮更多的內存。

+0

嗨榮子謝謝你的回覆。當我打開約30張圖像時,它會崩潰,但是當我打開一張新圖像時,我總是釋放舊圖像。所有圖像都在100kb以下(在Mac上)。 – boreas 2010-10-27 10:45:48

+0

該儀器顯示一個整體分配的內存15Mb,這主要是由我的語音輸出的東西。我看到一些類似的Malloc 1 + Mb,由CG Graphics調用,我不明白這是怎麼回事。 – boreas 2010-10-27 10:48:24

+2

加載時需要關於pixels_hor * pixels_ver * 4個字節的圖像,並且錯誤消息指示它需要大約2 MB。也許檢查他們是否真的被釋放。儀器給出了一個很好的內存使用圖。 – Eiko 2010-10-27 10:50:56

0

嘗試在本地自動發佈池中包裝您的分配/發佈。

2

哦,我想我終於修好了。是的,我的圖片相對較大,大小約700 * 600。

該問題似乎在[imgView setImage:img]; img雖然被釋放,但不知何故仍在記憶中,我不知道。在釋放imgView dealloc之前,一行代碼[imgView setImage:nil];修復了這個問題。

謝謝你的幫助。

+1

真的嗎?這解決了你的問題?聽起來很奇怪。 – steipete 2012-01-09 16:03:18

+0

我在分配和釋放幾個顯示各種文檔的UIWebView之後,有相同的「CoreAnimation:未能分配」錯誤;顯然這些在發佈webViews後繼續使用內存。在閱讀這個解決方案之後,我嘗試在釋放之前調用[webView loadHTMLString:@「」baseURL:nil],並解決了問題! – arlomedia 2012-06-27 00:41:21