ABAddressBook框架可以与Grand Central Dispatch的串行队列一起使用吗?(线程问题)

时间:2011-08-09 09:53:47

标签: thread-safety grand-central-dispatch abaddressbook

在苹果的文件中,苹果说:

  

重要:多个人不能使用ABAddressBookRef的实例   线程。每个线程都必须创建自己的实例。

并且

  

记录对象不能安全地传递给线程。相反,你   应该传递相应的记录标识符

第一个是什么意思?如果我能确保每一刻只有一个线程正在访问ABAddressBookRef,我可以在多个线程中使用这个ABAddressBookRef吗?

第二个,什么不能安全地通过线程传递真正的意思?

似乎GCD不保证所有块都在同一个线程中被执行,即使这些块在同一个串行队列中也是如此。

这是否意味着我不能使用GCD来处理ABAddressBook框架? 或者我只能在每个块中创建一个ABAddressBookRef?(我已经测试过了,真的很慢)

1 个答案:

答案 0 :(得分:2)

This question涵盖同一问题。这并不是说ABAddressBook不是线程安全的,它意味着你根本不能使用多线程。

但是,您可以使用getter / setter方法编写一个包装类来执行您需要的操作,可以从调度块内的任意线程调用它。包装器中的所有“变异”函数都必须在同一个线程上发生。也许可以考虑查看dispatch_once文档,了解如何使用grand-central来防止多实例化。