NSURLCacheStoragePolicy请求与响应

时间:2014-04-28 20:33:58

标签: ios objective-c nsurlrequest http-caching

我对了解iOS中的缓存机制有点困惑。

我一直在NSURLCache上阅读此博客,以自定义我的缓存政策。 我希望我的缓存完全由我的服务器缓存头控制。

所以我设置了

[request setCachePolicy:NSURLRequestReturnCacheDataElseLoad];

现在上面的博客指出我也可以为NSCachedURLResponse指定缓存策略。

- (NSCachedURLResponse *)connection:(NSURLConnection *)connection
                  willCacheResponse:(NSCachedURLResponse *)cachedResponse
{
    NSMutableDictionary *mutableUserInfo = [[cachedResponse userInfo] mutableCopy];
    NSMutableData *mutableData = [[cachedResponse data] mutableCopy];
    NSURLCacheStoragePolicy storagePolicy = NSURLCacheStorageAllowedInMemoryOnly;

    // ...

    return [[NSCachedURLResponse alloc] initWithResponse:[cachedResponse response]
                                                    data:mutableData
                                                userInfo:mutableUserInfo
                                           storagePolicy:storagePolicy];
}

那么首先要对请求使用缓存策略吗? 存储策略是请求参数还是响应参数。

1 个答案:

答案 0 :(得分:3)

区别在于:
NSURLRequestCachePolicy是客户端 - 服务器数据管理功能,用于描述应加载的数据源(本地缓存远程服务器)以及它们之间的条件。

NSURLCacheStoragePolicy仅是客户端数据管理功能,用于描述本地缓存(内存,本地数据库等;仅内存;无)的存储。

例如,如果您使用NSURLRequestReturnCacheDataElseLoad表示请求,NSURLCacheStorageAllowedInMemoryOnly表示响应,则会发生以下情况:

  1. 您发起请求;
  2. NSURLConnection在第一次请求时从服务器加载数据,并且没有任何缓存;
  3. 收到回复时,它会保存到基于内存的缓存存储中(只有在您的应用程序启动时它才会存在;
  4. 您可以在更长的时间内发起相同的请求;
  5. NSURLConnection从本地缓存存储加载数据;
  6. 您关闭应用程序(缓存存储已释放),再次启动它并发起相同的请求;
  7. NSURLConnection从服务器加载数据,因为基于内存的缓存存储已被释放。