Mic*_*ler 6 multithreading abaddressbook ios abrecordref
我ABAddressBook
在我的应用程序中使用.
对AB的访问来自单独的线程以释放UI.
我知道对AB实例的访问必须始终来自同一个线程,因此我构建了一个包装器.
包装器是一个单例,它维护自己的后台线程.
到包装器的所有消息都会自动重定向到后台线程,而调用线程会一直等到实现结束,最后用相关数据(联系人列表,特定联系人等)填充out参数.
尽管如此,设备上的地址簿有时会被清空(擦除).
每10-20次使用该应用程序后.
所以,我几乎没有问题:
先感谢您.
-
迈克尔
您只能从调用 ABAddressBookCreate() 的同一线程访问通讯簿。您不能在另一个线程中使用 ABRecordRef。只有记录 ID 和复制的数据才能在线程之间安全传递。
通常,我创建一个串行调度队列并将其用作不能阻塞主线程的地址簿调用的包装器。
当您使用 UI 时,您需要在主线程上调用 ABAddressBookCreate() 并将其用于 UI 调用。
如果您需要使用 UI 修改联系人,您可以修改该联系人,保存它,然后更新后台线程或队列上的地址簿,以便它包含最新的更改。为此,有一个通知回调 ABAddressBookRegisterExternalChangeCallback。
归档时间: |
|
查看次数: |
449 次 |
最近记录: |