NSURLCache线程安全吗?

时间:2014-02-12 23:58:31

标签: ios multithreading caching nsurlcache urlsession

我知道NSCache是线程安全的,但是我找不到任何提到NSURLCache是线程安全的文档。

3 个答案:

答案 0 :(得分:10)

除非documentation明确表示NSURLCache是线程安全的,否则它不是线程安全的。

(文档对线程没有任何说明。因此,不是线程安全的。)

并且时不时地再次检查文档。自从我写这个答案以来,线程安全规则已经改变了。

答案 1 :(得分:6)

请允许我将两个精彩的答案合并为第三个答案,现在引用updated documentation

  

线程安全

     

在iOS 8及更高版本中,以及macOS 10.10及更高版本,   NSURLCache是​​线程安全的。

     

虽然可以安全地调用NSURLCache实例方法   多个执行上下文同时,要注意方法   比如cachedResponseForRequest:storeCachedResponse:forRequest:   在尝试阅读或写作时有不可避免的竞争条件   对同一请求的回复。

     

NSURLCache的子类必须在这样的实现中实现重写方法   线程安全的方式。

也就是说,除非您明确调用cachedResponseForRequest:storeCachedResponse:forRequest:或其他"方法等,否则您将跨线程安全。什么"方法如"这些似乎是一个留给读者的练习,但是因为你会遇到一个不可避免的竞争条件"你很有可能最终弄明白: - )

答案 2 :(得分:3)

通常我会对此采取@ bbum的立场,但在NSURLCache不同意的情况下。

NSURLConnection是线程安全的,因为可以在您选择的线程上调度给定实例(但不要尝试在多个线程上安排单个实例!)

默认情况下,所有连接都与+[NSURLCache sharedCache]进行交互。从逻辑上讲,这意味着NSURLCache本身就是线程安全的,或者提供一种客户端可以明确调用自己的锁定机制。由于后者不存在,我推断NSURLCache是线程安全的。

仍然希望这是正式记录的,记住!