スレッドセーフであることは知ってNSCache
いますが、スレッドセーフであると言及されているドキュメントを見つけることができませんNSURLCache
。
3 に答える
ドキュメントにスレッドセーフであると明示的に記載されていない限り、NSURLCache
スレッドセーフではありません。
(ドキュメントはスレッドについて何も述べていません。したがって、スレッドセーフではありません。)
そして、時々ドキュメントをもう一度確認してください。この回答を書いてから、スレッド セーフのルールが変更されました。
更新されたドキュメントを参照して、2 つの素晴らしい回答を 3 つ目の回答にマージさせてください。
スレッドセーフ
iOS 8 以降および macOS 10.10 以降では、NSURLCache はスレッドセーフです。
NSURLCache インスタンス メソッドは複数の実行コンテキストから同時に安全に呼び出すことができますが 、同じ要求に対する応答を読み書きしようとすると、
cachedResponseForRequest:
やのようなメソッドには避けられない競合状態があることに注意してください。storeCachedResponse:forRequest:
NSURLCache のサブクラスは、このようなスレッドセーフな方法でオーバーライドされたメソッドを実装する必要があります。
つまり、明示的にcachedResponseForRequest:
、storeCachedResponse:forRequest:
または他の「同様のメソッド」を呼び出さない限り、スレッド間で安全になります。これらの「メソッド」が何であるかは、読者に残された課題のようですが、「避けられない競合状態」に遭遇する可能性が高いため、最終的には理解できる可能性があります :-)