2014-02-14 39 views
2

我正在創建一個應用程序,從網上加載了很多不同的圖像。所以我有兩個屏幕。帶有縮略圖的UITableView的「主」屏幕。以及帶有全尺寸圖像的UICollectionView的「圖像預覽」屏幕,其中用戶將在圖像之間滑動。iOS圖像緩存與內存中的圖像的自定義計數

我的任務是從網絡加載圖像並將它們存儲到文件和內存。使用SDWebImage很容易。但是很多時候我的內存中有太多的圖像,並且會導致內存警告。有時,內存緩存沒有足夠的時間來放置圖像和應用程序崩潰。

所以最簡單的解決方案是設置最大圖像數量存儲在內存中。

+0

我不thin'k問題從緩存中的圖像來或在屏幕上顯示很多圖像。因爲緩存不需要很多內存。你可以檢查可重複使用的單元格(設置單元格標識符或類似的東西)來節省你的時間。如果再使用不好,會使應用程序崩潰。否則,如果重新使用好的單元格,有時會顯示內存警告,但應用程序仍在運行 – larva

+0

應用程序處理相當大的圖像,它不僅僅是縮略圖。當然,當您配置最大緩存大小時,所有單元格都會被重用 – clockworkman

回答

1

我沒有找到任何能夠設置最大圖像數存儲在內存中的庫。所以我們已經制定了自己的解決方案並將其發佈在github上。

現在很容易設置

APSmartStorage.sharedInstance.maxObjectCount = 10; 

「APSmartStorage」會從內存中刪除隨機對象前店新的,如果「maxObjectCount」達成了

+0

我不認爲@clockwirkman需要其他框架...... –

+0

你是什麼意思? – clockworkman

0

的SDImageCache類有一些方法:

SDImageCache :: clearMemory <只能從陣列

SDImageCache :: clearDisk <刪除所有

SDImageCache :: cleanDisk <倒不如說刪除圖片:乾淨的高速緩存。

//Clear Image Cache 
SDImageCache *imgCache = [[SDImageCache alloc] init]; 
[imgCache clearMemory]; 
[imgCache clearDisk]; 
imgCache = nil; 

這是我的片斷^希望它可以幫助...

你可以設置最大緩存大小。通過SDImageCache :: maxMemoryCost,SDImageCache :: maxCacheSize和SDImageCache :: maxChacheAge。

+0

,您必須使用SDImageCache :: cleanDisk –

+0

我在創建自己的解決方案之前檢查了這些方法。他們很好,但無論如何,我應該寫一些邏輯來管理圖像。所以這不完全是我所需要的 – clockworkman