2017-08-07 69 views
0

我不知道是否使用SDWebImage從服務器加載大量圖像時我寫了一個bug,每次滾動我的列表(tableview或collectionview)時,內存提高到一個很高的值(例如200M)。 這是我在單元代碼:SDWebImage引起內存高值

- (void)loadInfo(NSDictionary *)dic 
    { 
     self.imgView sd_setImageWithURL:[NSURL URLWithString:dic[@"image_src"]]; 
    } 

我相信我的單元複用是好的,我想知道這是爲什麼,謝謝。

+0

200M很好。如果你想使緩存更小,你可以使用'SDImageCache sharedImageCache] .maxMemoryCost = [size in pixel - 每個像素通常是4個字節]' –

+0

當我添加這段代碼時,當內存升高到一個級別時,即使我看不懂原因,因爲Xcode顯示消息「丟失連接到'我的iPhone'」 – xiaoming

+0

剛纔,我做了一個測試,當內存等於750M,我得到了一個崩潰... – xiaoming

回答

2

當你滾動時,你正在異步加載大量圖片,使得你有很多線程和異步下載,從而造成內存問題。不過,我爲你建議如下。

1不從網上下載高清晰度的圖像,選擇默認的分辨率,讓您的服務器減少發送圖像面前的決議(如果可能節省了大量的內存)

2 - 這是一個好主意緩存圖像,以便您的單元格出現時不再下載它們(SDWebImage提供緩存功能)。

這2個步驟應該讓你的應用程序好吧。

希望這會有所幫助!

+0

感謝您的回覆,沒錯,這是我最喜歡的方式,但我的服務器無法爲我改變這一點,因爲不認爲這是一個問題,所以緩存功能可能是一個好方法,我會做一個測試。 – xiaoming

+0

做緩存測試並不是一個好主意,因爲SDWebimage已經爲你緩存了這些內存。 – iticle

+0

@iticle但是記憶非常高。在我看來,我將圖像緩存在磁盤上,下次直接從磁盤加載圖像。 – xiaoming

0

請嘗試[[SDImageCache sharedImageCache] setShouldDecompressImages:NO];[[SDWebImageDownloader sharedDownloader] setShouldDecompressImages:NO];。不要讓SDWebimage將圖像解壓縮到內存中。

+0

可否請您告訴我您使用的SDWebImage的版本,我無法在SDImageCache類中找到ShouldDecompressImages,並添加以下代碼:[[SDWebImageDownloader sharedDownloader] setShouldDecompressImages:NO];得到了同樣的結果。 -_- – xiaoming