首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iPhone多线程AddressBook操作

iPhone多线程AddressBook操作
EN

Stack Overflow用户
提问于 2010-03-05 04:10:56
回答 1查看 2.2K关注 0票数 9

我使用iPhone的AddressBook接口已经有一段时间了。但是为了提高应用程序性能,我决定“重用”AddressBookCreate返回的ABAddressBookRef,因为我注意到这样做会带来很大的性能改进。然而,我现在得到的EXEC_BAD_ACCESS错误是随机的,我认为原因在于iPhone参考实现中的这个“警告”:http://developer.apple.com/iphone/library/documentation/ContactData/Conceptual/AddressBookProgrammingGuideforiPhone/300-BasicObjects/BasicObjects.html#//apple_ref/doc/uid/TP40007744-CH3-SW1

重要提示: ABAddressBookRef实例不能由多个线程使用。每个线程必须通过调用ABAddressBookCreate来创建自己的实例。

现在,我认为这仅仅意味着它不是线程安全的,所以我必须同步对API的访问,但也许我错了,还有其他一些原因导致多线程扰乱了数据结构?

有人能确认这是否确实是线程安全问题(所以@synchronize应该可以工作)还是其他问题?

干杯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-05 06:01:32

这不是线程安全问题...你没有办法用锁来解决这个问题。评论很清楚地表明:

重要:ABAddressBookRef实例不能由多个线程使用。每个线程必须通过调用ABAddressBookCreate来创建自己的实例。

您可以做的是创建ABAddressBook的单个实例,并创建一个生产者/消费者体系结构来管理对对象的访问。

包装器将有一个主线程,它只做一件事:从阻塞队列读取操作请求,然后在地址簿上执行操作。所有线程都会将它们的操作排队到单个队列中,包装器将执行这些操作;如果队列中没有任何操作,则包装器将阻塞,直到队列中有东西为止。

这应该解决了不允许从多个线程使用ABAddressBookRef的问题。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2382388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档