2010-12-13 41 views
0

我有一個類包含一個NSDictionary,並定期地,我有一個線程寫入數據到這個NSDictionary。然後在其他時候,我有另一個視圖控制器讀取類的NSDictionary中的數據。讀寫線程數據結構的策略

什麼是最好的objective-c方式使這個類中的數據是線程安全的,這樣如果你要求數據爲'讀',你得到正確的版本aka,最後的書面版本而不是一個可能正在寫入目前?

回答

1

正如卡爾提到的,@synchronized是一種選擇。

如果您的目標是iOS 4.0+,另一個使用Grand Central Dispatch隊列來管理對來自多個線程/隊列的共享數據結構的訪問。 WWDC 2010 Session 211視頻對此技術有很好的解釋。

簡而言之:您創建一個自定義的GCD隊列(dispatch_queue_create()),其唯一職責是管理對共享數據結構的訪問。所有訪問共享結構的代碼都必須從這個隊列中進行訪問。因爲隊列一次只能執行一個代碼塊,所以沒有兩個線程可以同時訪問數據結構。

+0

是否應該在讀取或「寫入」過程中使用「鎖定」?也就是說,當數據被寫出並且'dispatch_sync'用於讀取時,我會使用'dispatch_async'嗎? – 2010-12-14 17:38:14

+0

@Justin:兩者。所有對共享數據結構的訪問都應該通過隊列。 – 2010-12-14 17:40:47

0

您正在尋找@synchronize,我想。

+0

@synchronize並沒有真正幫助事務保存,這正是賈斯汀的問題所暗示的。 – bbum 2010-12-13 23:37:29