我知道NSCache
是线程安全的,但是我找不到提到的任何NSURLCache
线程安全的文档。
3 回答
请允许我将两个出色的答案合并到第三个答案中,现在参考更新的文档:
线程安全
在 iOS 8 及更高版本以及 macOS 10.10 及更高版本中,NSURLCache 是线程安全的。
尽管 NSURLCache 实例方法可以安全地同时从多个执行上下文中调用,但请注意,在尝试读取或写入同一请求的响应时,方法喜欢
cachedResponseForRequest:
并storeCachedResponse:forRequest:
具有不可避免的竞争条件。NSURLCache 的子类必须以这种线程安全的方式实现被覆盖的方法。
也就是说,除非您显式调用或其他“类似方法” cachedResponseForRequest:
,否则storeCachedResponse:forRequest:
跨线程将是安全的。这些是什么“方法”似乎是留给读者的练习,但是由于您会遇到“不可避免的竞争条件”,因此您很有可能最终会弄清楚:-)
通常我会对此采取@bbum 的立场,但在NSURLCache
不同意的情况下。
NSURLConnection
是线程安全的,因为可以在您选择的线程上调度给定实例(但不要尝试在多个线程上调度单个实例!)
默认情况下,连接都与+[NSURLCache sharedCache]
. 从逻辑上讲,这意味着要么NSURLCache
本身是线程安全的,要么提供客户端可以显式调用自己的锁定机制。由于后者不存在,我推断NSURLCache
是线程安全的。
请注意,仍然希望将其正式记录在案!