Я использую ABAddressBook
в своем приложении.
Доступ к AB осуществляется из отдельного потока, чтобы освободить пользовательский интерфейс.
Мне известно, что доступ к экземпляру AB должен осуществляться из того же поток все время, и по этой причине я создал оболочку.
Оболочка является одноэлементной и поддерживает свой собственный фоновый поток.
Все сообщения, поступающие в оболочку, автоматически перенаправляются в фоновый поток, в то время как вызывающий поток ждет окончания реализации и в конце заполняет аргумент out соответствующими данными (список контактов, конкретный контакт и т. д.).
Хотя адресная книга на устройстве иногда опустошается (стирается).
После каждого 10-20-го использования приложения.
Итак, у меня есть несколько вопросов:
- После того, как я получу ABRecordRef от AB в выделенном потоке, должен ли я извлекать данные из ABRecordRef также в том же потоке или это может быть другой поток? У меня также есть обертка для ABRecordRef, поэтому, когда я извлекаю контакт из AB, я заполняю объект-оболочку человека, а затем использую его (читай из ABRecordRef) из исходного потока.
- Когда я использую API-интерфейсы пользовательского интерфейса AB (контроллер навигации средства выбора человека, контроллер представления нового человека и т. д.) и передаю им свой экземпляр ABAddressBook, должен ли я беспокоиться о том, что API не будет использовать этот экземпляр AB из того же потока, что и создал его? Я видел, что могу передать NULL вместо экземпляра AB, и тогда API будет использовать свой собственный AB, но что мне делать, если я хочу изменить контакт? В этом случае я должен передать экземпляр ABRecordRef...
- Есть что-то еще, о чем я не подумал?
Заранее спасибо.
--
Михаил