簡體   English   中英

當使用ARC加載許多.jpg文件時,收到內存警告並崩潰

[英]Recived memory warning and crash when loading many .jpg files with ARC

我的記憶有問題。 我使用ARC。 我正在將.jpgs加載到視圖上的UIImageView中。

Code showing example situation:

//.h file

@interface myClass : UIViewController
{
    IBOutlet UIImageView * back;
}
// don' t have @property
// back is connected in .xib

//.m file
-(void) viewDidLoad {
    UIImage *  myImg =[UIImage imageNamed:imgName];

    back.image=myImg;
}

-(void) returnToPrevoriousView {
   [self removeFromSuperview];
   back.image = nil;
}

問題是我從另一個視圖進入此視圖,並且imgName可以具有許多值。 例如,我可以六次訪問myClass,然后獲得日志:接收內存警告 ,我的應用程序崩潰。

我認為myImg不是從內存中釋放出來的嗎? 我不知道如何解決? JPG約有100kb。

PS。 當我加載.png時,盡管.png圖像通常具有600kB的速度,但它的工作原理(也更快)。 但是我認為它仍然不釋放內存嗎?

不要使用UIImage imageNamed:如果您確定該圖像不會在您的應用程序中再次使用。 imageNamed:使用內部緩存機制,該機制將使用額外的內存。

UIImage類參考

此方法在系統緩存中查找具有指定名稱的圖像對象,並返回該對象(如果存在)。 如果緩存中還沒有匹配的圖像對象,則此方法從指定的文件加載圖像數據,將其緩存,然后返回結果對象。

而是將UIImage imageWithContentsOfFile:用於一次性圖像,因為這些圖像不會被緩存。

注意 :僅imageNamed:會自動加載視網膜版本(@ 2x)。

一般而言,請嘗試使用PNG圖像..因為iOS已優化為非常有效地處理PNG圖像..並且JPEG圖像未提供此優化,所以當iOS開始顯示jpg時,它需要更復雜的解碼過程,這將需要花費很多時間更多的CPU能量。

將屬性分配給IBOutlet並進行合成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM