2011-08-09 74 views
2

ABAddressBook框架的工作在蘋果的文檔中,蘋果說:可與大中央調度的串行隊列(線程關注)

Important:ABAddressBookRef的實例不能被多個線程 使用。每個線程都必須創建自己的實例。

而且

記錄對象不能跨線程safely.Instead傳遞,你 應該通過相應的記錄標識

什麼是第一個意思嗎?如果我可以保證每個時刻只有一個線程正在訪問ABAddressBookRef,我可以在多個線程中使用這個ABAddressBookRef嗎?

而第二個,不能安全地通過線程傳遞的是什麼意思?

似乎GCD不保證所有的塊都在同一個線程中執行,即使這些塊在同一個串行隊列中。

那麼這是否意味着我不能使用GCD來處理ABAddressBook框架? 或者我只能在每個塊中創建一個ABAddressBookRef?(我測試過這個,真的很慢)

回答

2

This question涵蓋了同樣的問題。並不是說ABAddressBook不是線程安全的,它意味着你根本不能使用多線程。

但是,您可以使用getter/setter方法編寫一個包裝類,以執行您所需的操作,這可以從調度塊內的任意線程調用。包裝器中的所有'變異'函數都必須在同一個線程上發生。也許可以考慮查看dispatch_once文檔以使用grand-central來防止多個實例化。