2010-12-06 33 views
2

您好 我想知道會發生什麼,如果2個線程同時寫入對象? 不知道這是否應該是線程,我有一個視圖的多個副本,每個副本訪問並寫入一個nsuserdefault對象。 如果兩個或兩個以上的視圖副本寫入同一個對象會發生什麼?有沒有某種鎖定機制?2個線程寫入同一個對象時會發生什麼?

感謝

+0

嘗試使用NSLock。 – Eimantas 2010-12-06 07:08:12

+0

感謝joe打擊,如果nsuserdefaults是線程安全的,這將爲我節省很多麻煩:) – Veeru 2010-12-07 14:17:23

回答

8

NSUserDefaults類是線程安全的,看到documentation。所以是的,裏面可能有某種鎖定機制。

4
  1. 如果2個線程在沒有某種鎖定原語的情況下寫入相同的對象或結構,那麼將會發生非常糟糕的事情。充其量,你最終會出現不一致的狀態。最糟糕的是,你的應用會崩潰。 NSUserDefaults被定義爲線程安全的,所以 - 是的 - 它使用某種類型的鎖定。

  2. 如果您有在不同線程中運行的視圖都寫入同一個對象,這表示完全不同的問題。 UIKit不完全是線程安全的。大多數UI交互必須從主線程完成

該文檔有一個bunch of information對此。

相關問題