2013-07-16 39 views
1

我真的很苦惱,我的應用程序內存不足。這是我正在執行的基本操作,如下所述。請注意,無論何時用戶使用相機拍攝照片,我都會保存它的兩個不同版本 - 一個是預覽(用於快速加載),另一個用於高質量的縮放和稍後標記。UIImageView不釋放內存(根據VM跟蹤器) - 低內存警告和終止

這裏是我的操作順序表:

  1. 在應用程序啓動,已採取在應用圖像顯示縮略圖(顯然,在首批推出的應用程序,此列表爲空) 。
  2. 觸摸相機按鈕啓動UIImagePickerController
  3. 用戶拍攝照片並保存(再次,預覽保存和全尺寸的照片被保存)
  4. 縮略圖刷新列表,顯示新的預覽圖像。同樣,VM Tracker工具中「Image IO」的整體大小仍然非常小(可能增加0.5MB)。
  5. 用戶觸摸預覽圖像中的一個,這將啓動,做以下的一個不同的視圖控制器:
    • 創建新的UIImageView,加載圖像,添加爲子視圖的視圖控制器查看
    • 突然,「圖像IO 「跳過30MB。

將不會是一個大問題,但是當我回去(導航控制器POP),無論是「圖像Io」型還是「髒」型的尺寸減小。就好像UIImageView沒有被銷燬一樣。每次我推這個視圖控制器並加載一個圖像,大小增加30MB,並且彈出不會減少它。

我正在使用ARC,所以我不會調用釋放自己,但我希望它會在我彈出視圖控制器時被銷燬。

僅供參考,我使用保存的預覽和全圖像的設置是:

前瞻:[UIImageJPEGRepresentation([UIImage imageWithImage:image scaledToSize:CGSizeMake(300, 400)], 0.4f) writeToFile:previewPath atomically:NO];

全:[UIImageJPEGRepresentation(image , 0.8f) writeToFile:imagePath atomically:NO];

我最關心的是:(1)找出在我彈出包含視圖控制器後,如何擺脫UIImage中使用的內存,但我也想知道(2)加載時爲什麼圖像是30MB。

+1

(1)我已經看到了類似的問題,圖像視圖,嘗試彈出控制器之前,設置它的形象,以「無」,看看問題是否仍然存在。 (2)取決於圖像的大小,但未壓縮的圖像可能需要很大的空間(4000x2000)需要32MB。如果這是個問題,你應該關注一下「平鋪」(我認爲它甚至在WWDC中有描述) –

+0

@MaticOblak,很好的建議。對於(1),我嘗試將包含圖像視圖的視圖設置爲零,但這不起作用,但您有一個好點。我可以嘗試爲UIImageView和UIImage創建一個實例變量,並在彈出之前將它們都設置爲nil(當然是UIImage),然後看看它是否有效。對於(2)感謝信息 - 我一定會看看。 :) – thephatp

+0

@MaticOblak,#1工作!我明確地將UIImage和UIImageView設置爲零(不確定是否需要這兩者),並且確實已經釋放了內存。 **如果您將此作爲答案發布,我會將其標記爲公認的解決方案!**謝謝! – thephatp

回答

3

至於建議的@Matic Oblak ...

(1)我已經看到了類似的問題,圖像視圖,嘗試彈出控制器,看看問題是否仍然存在之前設置它的形象爲「無」。

結果:我明確地將UIImage和UIImageView設置爲零(不知道是否需要這兩者),並且確實已經釋放了內存。

5

我在圖像編輯應用程序工作,這幫助我很多關於減少內存use.Try這

不加載與[UIImage的imageNamed:]圖片在ImageView的負荷的形象,這是導致內存問題,當沒有。圖像越多,

利用這一點,

NSString * imgpath= [ [ NSBundle mainBundle] pathForResource:@"imageName" ofType:@"png"]; 

ImageView.image=[UIImage imageWithContentsOfFile: imgpath]; 
+0

它真的有效... –