繁体   English   中英

[NSURLCache cachedResponseForRequest:]如何进行匹配?

[英]How does [NSURLCache cachedResponseForRequest:] do its matching?

NSURLCache如何确定它具有对请求的缓存响应? 我不清楚如何定义两个NSURLRequest之间的相等性或如何对其进行哈希处理。

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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM