最近作的一個項目,裏面有這樣一個需求,在一個頁面,用一個UIImageView不停的刷新顯示圖片,圖片可能會重複顯示;圖片是從服務器下載下來的data流,data轉UIimage系統的方法:緩存
UIImage *image = [UIImage imageWithData:data];
這個方法並很差,用過 SDWebImage 的都知道爲何很差,既然圖片是服務器下載,並且圖片能夠重複,那就用 SDWebImage 作緩存,下次請求能夠用圖片惟一標示先從本地拿,若是有,就不用再請求,直接返回就行,下面是圖片下載成功後返回的 responseObject data流 :服務器
UIImage *responseImage = [UIImage sd_imageWithData:responseObject];
[[SDImageCache sharedImageCache] storeImage:responseImage forKey:@"imageKey-圖片惟一標示" completion:nil];
緩存事後,我再用 responseImage 賦值給 UIImageView 的image :測試
imageView.image = responseImage;
而後開始測試,接着就發現了一個問題,再請求切換圖片時【圖片不重複】,運行內存一直在增長,當我把 imageView.image = responseImage; 這行註釋掉以後,內存一切正常;發現若是將請求拿到的 responseImage 直接賦值給 imageView 就出出現這個內存暴漲問題,接着我作了如下修改,拿到 responseImage 並將其緩存如本地後,再用 SDImageCache 取出來一個緩存過的新UIIImage:imageResponseCache,再將 imageResponseCache 賦值給 imageView:spa
UIImage *responseImage = [UIImage sd_imageWithData:responseObject]; [[SDImageCache sharedImageCache] storeImage:responseImage forKey:@"imageKey-圖片惟一標示" completion:nil];
UIImage *imageResponseCache = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:@"imageKey-圖片惟一標示"];
imageView.image =imageResponseCache;
經過上述實現,內存一切正常。 code