1注簿、AFNetworking 3.0 的圖片緩存用 NSURLCache 緩存到本地。原來(lái)的 AFImageCache 不負(fù)責(zé)緩存跳仿,由AFAutoPurgingImageCache負(fù)責(zé)緩存到內(nèi)存诡渴。
NSURLCache 會(huì)自動(dòng)在本地 /Library/Caches/com.*.* 目錄下生成緩存文件。(image 就在 fsCacheData 目錄下)
- 當(dāng)使用 NSURL 相關(guān)的框架菲语,使用到緩存的時(shí)候妄辩,系統(tǒng)會(huì)在 Caches目錄下創(chuàng)建一個(gè) 跟 bundle identifer 同名的一個(gè)文件夾,以及里面的 Cache.db山上、Cache.db-shm眼耀、Cache.db-wal
三個(gè)文件和文件夾 fsCacheData/
·fsCacheData/ 文件夾會(huì)在有需要緩存數(shù)據(jù)到文件的數(shù)據(jù)才會(huì)有,如緩存圖片
- 可以使用 [[NSURLCache sharedURLCache] removeAllCachedResponses] 清理這里所有的緩存數(shù)據(jù)佩憾。
2哮伟、 2.* 版本的 AFImageCache 繼承自 NSCache,負(fù)責(zé) 內(nèi)存和 disk 緩存鸯屿。3.* 版本 AFImageCache 繼承自 NSObject澈吨,只負(fù)責(zé)持有 image 和 image 的內(nèi)存大小把敢,為 AFAutoPurgingImageCache 服務(wù)寄摆,AFAutoPurgingImageCache 負(fù)責(zé)緩存到內(nèi)存。
這個(gè)策略和 Swift 版本的 AFNetworking Alamofire 中的 AlamofireImage保持一致修赞。
3婶恼、AFAutoPurgingImageCache 負(fù)責(zé)內(nèi)存緩存,NSURLCache 負(fù)責(zé)硬盤緩存柏副,所以 通過(guò) AFImageDownloader 的 imageCache - (nullable UIImage *)imageforRequest:(NSURLRequest *)request withAdditionalIdentifier:(nullable NSString *)identifier;
方法是讀不到 硬盤緩存的圖片的勾邦,只能通過(guò) NSURLCache 去獲得
+ (UIImage *)dd_cachedImageForRequest:(NSURLRequest *)request
{
AFImageDownloader *downloader = [AFImageDownloader defaultInstance];
// 內(nèi)存緩存
UIImage *cachedImage = [downloader.imageCache imageforRequest:request withAdditionalIdentifier:nil];
if (!cachedImage) {
// 內(nèi)存緩存沒(méi)有,讀取硬盤緩存
NSURLCache *urlCache = downloader.sessionManager.session.configuration.URLCache;
NSCachedURLResponse *cacheResponse = [urlCache cachedResponseForRequest:request];
if (cacheResponse.data) {
cachedImage = [UIImage imageWithData:cacheResponse.data];
}
}
return cachedImage;
}
4割择、AFImageDownlder眷篇,下載圖片的時(shí)候只判斷了有沒(méi)有內(nèi)存緩存,如果內(nèi)存緩存沒(méi)有讀取到圖片荔泳,就會(huì)調(diào)用下載邏輯蕉饼,通過(guò)下載緩存的內(nèi)存緩存硬盤緩存來(lái)獲取到已下載過(guò)的圖片,如果沒(méi)有下載過(guò)玛歌,就會(huì)重新下載昧港。