2012-09-11 250 views
0

我有一個scrollview,我可能會添加400個縮略圖。我用儀器分析它,並觀看內存livebytes高達70MB左右。然後,我將removefromperview全部移除,並且實時字節保持不變。釋放ScrollView內存

需要恢復此內存。有什麼訣竅?

謝謝。

回答

0

我認爲這是一個類似的問題:Problem dealloc'ing memory used by UIImageViews with fairly large image in an UIScrollView

我以前也有類似的問題。一個解決方案似乎是在最終發佈之前將UIImageView映像設置爲零,根據此問題的答案:confusing memory allocation error on iPhone

+0

混淆iPhone上的內存分配錯誤:這是解決方案。在釋放UIImageView之前,將UIImageView中的圖像設置爲零,在滾動視圖中將所有已用內存吹走。 – user953175

0

確保您還要從數據源中除去UIImage實例。另外,考慮將UIImage放入NSCache中,在內存不足時將其清除,並使用UITableView而不是UIScrollView(以重用界面元素)。

0

有兩件事情要管理 - 意見和圖像。您只需要足夠的滾動視圖子視圖來填充滾動視圖的可見部分。這裏的好模式是有一個重用池。當您需要滾動視圖的子視圖時,請在重用池中檢查一個。如果沒有,請分配一個。滾動發生時,將不再可見的視圖放入重用池中,並在新可見空間中添加視圖(首先檢查重用池)。

圖像可以放置在由其url和時間索引的緩存中。可變字典非常適​​合url索引。包含url的可變數組可以成爲時間索引的一個不錯的FIFO隊列。該url可以是打包在應用程序中的圖像的文件url,也可以是下載圖像時的遠程URL。要添加到緩存中,請將url-image對添加到字典中,然後將url添加到時間數組的前面(索引0)。

每次添加到緩存時,請檢查它的大小是否超出您的目標。如果它刪除最舊的圖像。爲此,從數組中獲取lastObject,從字典中移除該url鍵值對,並從數組中移除lastLastObject。

此圖片緩存可以/應該大於滾動視圖中可見視圖的數量。您可以調整此大小以匹配所需的內存目標,並考慮獲取映像所花費的時間(如果映像是遠程的,則可能需要更大的緩存)。

將圖像子視圖添加到滾動視圖時,爲其分配一個默認圖像。使用URL查找來檢查緩存中的緩存圖像。如果有一個,請替換默認值。如果不是,則爲該圖像啓動一個異步獲取。當該圖像到達時,將其添加到緩存並檢查滾動視圖以查看包含該圖像的子視圖是否仍然可見(它可能已被滾動)。如果是,請設置圖像。