NSURLCache如何确定它对请求有缓存响应?我不清楚如何定义两个NSURLRequests之间的相等性或如何对它们进行哈希处理。
答案 0 :(得分:2)
NSURLCache
有一个名为cachePolicy
的属性,可用于指定要使用的缓存行为。默认值为NSURLRequestUseProtocolCachePolicy
,这意味着缓存逻辑由协议实现定义(在大多数情况下是HTTP)。
AFNetworking的作者撰写了一篇文章,解释了每个策略之间的差异,以及默认策略对HTTP协议的行为:NSURLCache - NSHipster。
就+[NSURLProtocol requestIsCacheEquivalent:toRequest:]
方法的实现而言,这是我能够从反编译中获得的。我不能保证它是100%准确的,但似乎有道理:
+ (BOOL)requestIsCacheEquivalent:(NSURLRequest*) a toRequest:(NSURLRequest*)b
{
if(a == b)
{
return YES;
}
else
{
Class classA = [self _protocolClassForRequest:a allowCF:YES];
Class classB = [self _protocolClassForRequest:b allowCF:YES];
if(classA != nil && classB != nil)
{
if(classA == classB)
{
// I assume this is to make sure it's not an abstract comparison
if([NSURLProtocol self] != self)
{
NSURL *urlA = [[classA canonicalRequestForRequest:a] URL];
NSURL *urlB = [[classB canonicalRequestForRequest:b] URL];
if([urlA isEqual:urlB])
{
return YES;
}
}
}
}
return NO;
}
}