Может ли фреймворк ABAddressBook работать с последовательной очередью Grand Central Dispatch? - PullRequest
2 голосов
/ 09 августа 2011

В документе Apple, яблоко говорит:

mpВажно: экземпляры ABAddressBookRef не могут использоваться несколькими потоки. Каждый поток должен создать свой собственный экземпляр.

А

Запись объектов не может быть безопасно передана между потоками. Вместо этого вы должен передать соответствующий идентификатор записи

Что означает первый? Если я могу гарантировать, что каждый момент есть только один поток, который обращается к ABAddressBookRef, могу ли я использовать этот ABAddressBookRef в нескольких потоках?

И, во-вторых, что не может быть безопасно передано через потоки?

И похоже, что GCD не гарантирует, что все блоки выполняются в одном и том же потоке, даже если блоки находятся в одной последовательной очереди.

Значит ли это, что я не могу использовать GCD для работы с платформой ABAddressBook? Или я могу создать только ABAddressBookRef в каждом блоке? (Я проверял это, очень медленно)

1 Ответ

2 голосов
/ 10 августа 2011

Этот вопрос охватывает ту же проблему. Дело не в том, что ABAddressBook не является многопоточным, это означает, что вы вообще не можете использовать многопоточность.

Однако вы можете написать класс-оболочку с методами getter / setter, чтобы делать то, что вам нужно, что может быть вызвано из произвольных потоков внутри блока отправки. Все «мутирующие» функции внутри оболочки должны выполняться в одном и том же потоке. Возможно, стоит рассмотреть документацию dispatch_once для использования grand-central для защиты от множественных экземпляров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...