我知道NSCache
是线程安全的,但是我找不到任何提到NSURLCache
是线程安全的文档。
答案 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
是线程安全的。
仍然希望这是正式记录的,记住!