iOS开发有时候项目开发需要对请求进行缓存,比如特定url的请求素材 , 缓存又分为内存缓存和磁盘缓存,内存缓存个人理解为运行时的空间,程序运行时开辟的空间,程序结束又变为空闲空间。 磁盘缓存即是专门存在沙盒中的存放缓存文件的目录。
网络请求缓存策略可以使用apple提供的缓存类NSURLCache
NSURLCache 通过NSURLRequest对应NSCachedURLResponse映射的请求缓存,可以自定义缓存大小,也可以自定义缓存目录,缓存清除操作
可以自定义:
NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024
diskCapacity:30 * 1024 * 1024
diskPath:nil];
[NSURLCache setSharedURLCache:URLCache];
也可以 从request请求中获取:
NSURLCache* URLCache = [URLCache cachedResponseForRequest:self.request];
iOS也对request提供缓存策略逻辑
typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy) { NSURLRequestUseProtocolCachePolicy = 0, // 默认的缓存策略, 如果缓存不存在,直接从服务端获取 NSURLRequestReloadIgnoringLocalCacheData = 1, // 忽略本地缓存数据,直接请求服务端. NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // 忽略本地缓存,代理服务器以及其他中介,直接请求源服务端. NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData, NSURLRequestReturnCacheDataElseLoad = 2, // 有缓存就使用,不管其有效性(即忽略Cache-Control字段), 无则请求服务端. NSURLRequestReturnCacheDataDontLoad = 3, // 死活加载本地缓存. 没有就失败. NSURLRequestReloadRevalidatingCacheData = 5,// 缓存数据必须得得到服务端确认有效才使用 };
// 配置缓存策略并设置过期时间
NSMutableURLRequest *mutableRequest = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:cachePolicy timeoutInterval:timeoutInterval];
实际应用:
SDWebImage 缓存策略 是NSURLCache + SDImageCache 在下载操作开始时从request中获取缓存数据, 再根据策略返回数据