NSURLCache官方文档阅读
NSURLCache
Overview
NSURLCache类通过将NSURLRequest对象映射到NSCachedURLResponse对象来实现对URL加载请求的响应的缓存。 它提供内存和磁盘缓存,并可让你操作内存和磁盘部分的大小。 你还可以控制持久存储缓存数据的路径。
NOTE:在iOS中,当系统运行磁盘空间不足时,只有当你的应用未运行时,磁盘上的缓存可能会被清除。
在iOS 8及更高版本以及macOS 10.10及更高版本中,NSURLCache是线程安全的。
虽然NSURLCache实例方法可以同时从多个执行上下文中安全地调用,但请注意,像尝试为相同请求读取或写入响应时,诸如cachedResponseForRequest:
和storeCachedResponse:forRequest
之类的方法具有不可避免的竞争条件。
NSURLCache的子类必须以线程安全的方式实现覆盖父类的方法。
Symbols
Getting and setting shared cache
-
@property(class, strong) NSURLCache *sharedURLCache
返回NSURLCache的单例,这是一个类属性;
没有特殊缓存要求或约束的应用可以直接使用此实例。 具有更多特定需求的应用可以创建一个自定义的NSURLCache对象,并调用setSharedURLCache:
方法将其设置为共享缓存实例。 所有对共享实例的调用都应该在此设置之后。
Creating a new cache object
-
- (instancetype)initWithMemoryCapacity:(NSUInteger)memoryCapacity diskCapacity:(NSUInteger)diskCapacity diskPath:(NSString *)path
使用指定的值来初始化NSURLCache对象;
memoryCapacity: 内存缓存的字节数;
diskCapacity: 磁盘缓存的字节数;
path:在macOS中,path是存储磁盘缓存的位置。在iOS中,path是应用程序的默认缓存目录的子目录的名称,用于存储磁盘缓存(如果不存在则创建子目录)。生成的NSURLCache支持磁盘存取,因此开发人员在选择此类缓存的容量时可以更加宽松。 在大多数情况下,以几十兆字节的磁盘缓存应该是可以接受的。
Getting and storing cached objects
-
- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request
返回缓存的指定request的的响应数据;如果不存在返回nil;
-
- (void)storeCachedResponse:(NSCachedURLResponse *)cachedResponse forRequest:(NSURLRequest *)request
缓存指定的request对应的cachedResponse
Removing cached objects
-
- (void)removeAllCachedResponses
删除所有的缓存数据;
-
- (void)removeCachedResponseForRequest:(NSURLRequest *)request
清空指定request对应的缓存的响应数据,如果本来就没有则什么都不做;
Getting and setting on-disk cache properties
-
@property(readonly) NSUInteger currentDiskUsage
调用者的磁盘缓存的当前已使用的大小(以字节为单位)。
-
@property NSUInteger diskCapacity
调用者的磁盘缓存的总容量(以字节为单位)。
Getting and setting in-memory cache properties
-
@property(readonly) NSUInteger currentMemoryUsage
和@property NSUInteger memoryCapacity
同上;
Instance Methods
-
- (void)getCachedResponseForDataTask:(NSURLSessionDataTask *)dataTask completionHandler:(void (^)(NSCachedURLResponse *cachedResponse))completionHandler
这个是写在NSURLSessionTaskAdditions分类中的方法,没有注释和相关文档,下面的方法也是一样的。看方法名,作用应该是取出指定任务中的所有缓存的响应数据;
-
- (void)removeCachedResponseForDataTask:(NSURLSessionDataTask *)dataTask
删除指定任务中的缓存数据;
-
- (void)removeCachedResponsesSinceDate:(NSDate *)date
删除指定时间内的缓存数据;
-
- (void)storeCachedResponse:(NSCachedURLResponse *)cachedResponse forDataTask:(NSURLSessionDataTask *)dataTask
存储指定任务的响应数据;