iOS 缓存策略记录

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中获取缓存数据, 再根据策略返回数据

原文地址:https://www.cnblogs.com/air-liyan/p/13995782.html