日常開發中我們比較常見的是SDWebImage進行圖片的請求和展示,比如比較常用的方法有:
[self.imageView sd_setImageWithURL:[NSURL URLWithString:urlStr]];
以及
[self.imageView sd_setImageWithURL:[NSURL URLWithString:urlStr] placeholderImage:[UIImage imageNamed:@"pic_youjihua_default"]];
而這種如果圖片鏈接的內容,即鏈接對應的圖片不會改變的話,那么這樣肯定是沒有問題的啊!但是有時候后臺是這樣的,返回的鏈接是一樣的,但是鏈接對應的圖片卻是不一樣的,可以用瀏覽器在不同的時候打開鏈接進行驗證,那么這種情況下我們又該怎么辦呢?因為上面的方法已經失效了,下面我們來說說繼續在使用SDWebImage的情況下進行實現。
方法一:
[ self.imageView sd_setImageWithURL:[NSURL URLWithString:urlStr] placeholderImage:[UIImage imageNamed:@"pic_youjihua_default"] options:SDWebImageRefreshCached];
就是直接使用了SDWebImageRefreshCached刷新緩存,這個方法我有段時間成功了,后面也不能實現了,同樣也有人成功了,這個有點奇妙啊!
方法二:
繼續使用SDWebImage來實現,既然SDWebImage是有緩存的,那么我們在每次對圖片進行賦值前都來刪除一下它的緩存不就實現了么?
導入頭文件:
#import "SDImageCache.h"
然后使用方法如下:
//對應的圖片鏈接
NSString *urlStr = @"http://n.****.cn/edu/transform/20160505/pe7k-fxryhhu2274915.png";
//清除對應鏈接的圖片緩存
[[SDImageCache sharedImageCache] removeImageForKey:urlStr withCompletion:^{
}];
[self.imageView sd_setImageWithURL:urlStr placeholderImage:[UIImage imageNamed:@"touxiang"]];
這樣的方式就實現了,只是多了一步清除緩存。
方法三:
這個方法就不再使用SDWebImage來實現了,直接使用如下方式:
NSData * data = [[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:urlStr]];
UIImage *tempImage = [[UIImage alloc]initWithData:data];
self.imageView.image = tempImage;
通過獲取NSData的方式更好的解決了這個問題,效果更好,因為這里是不能考慮緩存的,每次都要進行新的請求,至于各位猿爺如何選擇就要看各位的了,小蜜蜂拋磚引玉一下,也請各位猿爺賜教更好的方式。
歡迎和我交流,QQ:834537795.(小蜜蜂)