sdwebimage緩衝圖片對比問題,
開發IOS項目的時候,發現一個關於第三方架構sdwebimage的圖片緩衝的問題。搜了一下百度,發現有人已經提出同樣的問題,如下:
有個問題請教一下各位,就是用sdwebimage下載圖片的時候會緩衝到手機上,那麼我把同一個url下面的圖片換了,這個時候再用sdwebimage載入這個url,他是用緩衝的還是重新下載了?
如果,她載入了緩衝的圖片那麼就錯了,因為這個url下的圖片已經換掉了,如果他從新下載了,他是如何對比緩衝圖片的不同的。
然後,我搜到瞭解答,答案如下:
答案:使用緩衝。
原因:圖片在NSCache中是以absolute url作為key儲存,在磁碟緩衝目錄中是以原始url進行md5後的字串作為檔案名稱儲存。查詢匹配的時候只按key和檔案名稱匹配。
證據:NSCache
- (NSString *)cacheKeyForURL:(NSURL *)url
{
#if NS_BLOCKS_AVAILABLE
if (self.cacheKeyFilter)
{
return self.cacheKeyFilter(url);
}
else
{
return [url absoluteString];
}
#else
return [url absoluteString];
#endif
}
SDImageCache
- (NSString *)cachePathForKey:(NSString *)key
{
const char *str = [key UTF8String];
unsigned char r[CC_MD5_DIGEST_LENGTH];
CC_MD5(str, (CC_LONG)strlen(str), r);
NSString *filename = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10], r[11], r[12], r[13], r[14], r[15]];
return [diskCachePath stringByAppendingPathComponent:filename];
}
備忘:以上結論在2.x版本下有效,3.0以上版本不瞭解。
所以,sdwebimage的緩衝策略還是不錯的,以後儘管放心地調用setImagewithUrl的方法,他會非同步下載和自己處理緩衝