簡體   English   中英

NSURLCache線程安全嗎?

[英]Is NSURLCache thread safe?

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

除非文檔明確說明NSURLCache是線程安全的,否則它不是線程安全的。

(文檔沒有提及線程。因此,不是線程安全的。)

並且時不時地再次檢查文檔。 自從我寫這個答案以來,線程安全規則已經改變了。

請允許我將這兩個精彩的答案合並為第三個答案,現在提及更新的文檔

線程安全

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

盡管可以安全地從多個執行上下文同時調用NSURLCache實例方法,但請注意,在嘗試讀取或寫入同一請求的響應時,像cachedResponseForRequest:storeCachedResponse:forRequest:這樣的方法會有不可避免的競爭條件。

NSURLCache的子類必須以這種線程安全的方式實現重寫方法。

也就是說,除非你明確地調用cachedResponseForRequest:storeCachedResponse:forRequest:或其他“類似方法”,否則你將跨線程安全。 這些“類似”的方法似乎是一個留給讀者的練習,但是既然你會遇到“不可避免的競爭條件”,你很有可能最終弄明白:-)

通常我會對此采取@bbum的立場,但在NSURLCache不同意的情況下。

NSURLConnection是線程安全的,因為可以在您選擇的線程上調度給定實例(但不要嘗試在多個線程上安排單個實例!)

默認情況下,連接都與+[NSURLCache sharedCache]交互。 從邏輯上講,這意味着NSURLCache本身就是線程安全的,或者提供了一種客戶端可以顯式調用自身的鎖定機制。 由於后者不存在,我推斷NSURLCache是線程安全的。

請記住,這仍然需要正式記錄!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM