2014-02-12 25 views

回答

3

通常我會帶@ bbum對這一立場,但在NSURLCache的情況下不同意。

NSURLConnection是線程安全的,在這個意義上,一個給定的實例可以在您選擇的線程調度(但不要試圖在多線程調度的單個實例!)

默認情況下,所有的連接與+[NSURLCache sharedCache]交互。邏輯上,這意味着要麼NSURLCache本身是線程安全的,要麼提供了一個客戶端可以明確調用自己的鎖定機制。由於後者不存在,我推斷NSURLCache是線程安全的。

還是會這樣來正式記錄下來,介意!

9

除非documentation明確表示NSURLCache是線程安全的,那麼它不是線程安全的。

(文檔說任何關於線程,因此不是線程安全的。)

4

請允許我向兩個輝煌的答案與參考updated documentation合併成第三個,現在:

線程安全

在iOS系統中8和更高版本,和MacOS 10.10及更高版本, NSURLCache是​​線程安全的。

雖然NSURLCache實例方法可以安全地從 多個執行上下文同時呼籲,要注意方法 像cachedResponseForRequest:和storeCachedResponse:forRequest: 試圖讀取或寫入 響應時有不可避免的競爭條件同樣的要求。

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

也就是說,除非你明確地調用cachedResponseForRequest:storeCachedResponse:forRequest:或其他「方法一點通」,你會跨線程安全的。 「這些」的方法似乎是爲讀者留下的一個練習,但是由於你會遇到「不可避免的競爭條件」,所以最終你很有可能找到:-)