Вы должны обращаться к адресной книге только из того же потока, который вызвал ABAddressBookCreate (). Вы не можете использовать ABRecordRef в другом потоке. Только идентификаторы записей и скопированные данные могут безопасно передаваться между потоками.
Обычно я создаю очередь последовательной отправки и использую ее в качестве оболочки для вызовов адресной книги, которые не могут заблокировать основной поток.
Когда вы используете пользовательский интерфейс, вам нужно вызвать ABAddressBookCreate () в главном потоке и использовать его для вызовов пользовательского интерфейса.
Если вам нужно изменить контакт с помощью пользовательского интерфейса, вы должны изменить контакт, сохранить его, а затем обновить адресную книгу в фоновом потоке или очереди, чтобы он содержал последние изменения. Для этой цели существует обратный вызов уведомления ABAddressBookRegisterExternalChangeCallback.