Mar*_*rco 9 iphone multithreading addressbook
我已经使用iPhone的AddressBook api一段时间了.但是为了提高应用程序性能做了一些重构,我决定"重用"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应该工作)还是其他一些问题?
干杯
Kir*_*ril 11
这不是一个线程安全问题......没有办法让你用锁来解决它.评论非常清楚:
重要说明:多个线程不能使用ABAddressBookRef的实例.每个线程必须通过调用ABAddressBookCreate来创建自己的实例.
您可以做的是创建ABAddressBook的单个实例,并创建一个生产者/消费者体系结构来管理对象的访问.
包装器将有一个主线程,只执行一项操作:从阻塞队列中读取操作请求,然后对通讯簿执行操作.所有线程都将其操作排入单个队列,包装器将执行这些操作; 如果队列中没有任何内容,则包装器将阻塞,直到队列中存在某些内容.
这应该解决不允许使用ABAddressBookRef来自多个线程的问题.
| 归档时间: |
|
| 查看次数: |
2209 次 |
| 最近记录: |