2014-01-31 31 views
1

我有一個使用大型UIScrollowView的ipad應用程序的兩個視圖,這似乎是導致內存問題。當內存命中大約250MB時,我會得到我的第一條內存警告。當使用蘋果工具,這裏是最大的所有堆的:iOS 7應用程序因內存壓力而終止

VM:ImageIO_JPEG_Data,大小32.13MB VM:CoreAnimation,大小32.13MB VM:ImageIO_JPEG_Data,大小26.64MB ...

我在scrollview中有許多圖像 - 這些圖像都被加載到故事板中,我想知道如果我減小圖像的大小或分辨率,它會解決問題?

+1

你應該做的第一件事是運行Analyzer並讓它檢查泄漏。然後運行探查器檢查泄漏。然後考慮是否需要保持所有這些圖像加載與使用某種緩存方案(例如,UIImage imageNamed)。 –

回答

3

您可以設置一個系統來在滾動視圖中的某些位置刪除/加載某些圖像,因此當用戶即將看到它們時,應用程序只會將它們放在內存中。

因爲你認爲它很大,所以在scrollview的滾動方法中,設置變量來知道scrollview在哪個位置(例如:一半向下,10%滾動等)。如果用戶坐在滾動視圖的末尾(即:無法再向下滾動(100%)),那麼他們並不是完全看着視圖頂部的圖像。然後您可以刪除這些圖像,以便應用程序可以重新使用該內存。當用戶滾動並且滾動視圖接近特定百分比時,您可以加載用戶即將看到的圖像,並可以刪除用戶遠離的圖像(這可能會導致幾秒鐘的'空白'用戶瘋狂地通過你的應用程序滾動,但沒關係,因爲圖像全部加載不會超過幾秒鐘)。

因爲這些圖像被加載到故事板中,我假設你通過UIImageView加載它們。簡單地給每個人一個插座(按住Ctrl並單擊並將其拖動到您的課程的.h文件並創建一個IBOutlet),然後當您有多少用戶在您的滾動視圖的下方時,您可以知道'沒問題,用戶是

//^Get scrollview scrolled percentage 
//^find out where the user is, get a list of UIImageViews that are not visible on the screen 
_yourUIImageView.image = nil //get rid of the image, clear memory up 
//then when you need to add it again, assign an image to the UIImageview 

希望我幫助:在50%,所以我可以擺脫圖像的0-20%,並滾動視圖」的80-100%, 您做到這一點。

+0

無法通過設置image = nil – Bachzen

+0

來清除內存,您是否可以嘗試運行樂器並分析應用程序,如「熱舔」建議?或者,你是如何看到記憶沒有被刪除的? – blindman457

1

最大不情節提要載入圖像, 而你可以做到這一點通過編碼,像下面

NSString *resourcePath = [[NSBundle mainBundle] resourcePath]; 
NSString *pathForImageFile1 = [resourcePath stringByAppendingPathComponent:@"filename.png"]; 
UIImage * image = [[UIImage alloc] initWithContentsOfFile:pathForImageFile1]; 
imageView.image = image; 
image = nil; 

希望它能幫助!

+0

感謝Stark進行編輯。 – Vinay

相關問題