1

NSURLCache は、要求に対する応答がキャッシュされていることをどのように判断しますか? 2 つの NSURLRequests の等価性がどのように定義されているか、またはそれらがどのようにハッシュされているかは明確ではありません。

4

1 に答える 1

2

NSURLCachecachePolicyには、使用するキャッシング動作を指定するために使用できるというプロパティがあります。デフォルトは です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;
    }
}
于 2014-10-21T16:22:52.030 に答える