我从地址簿文档的意义以及对底层CoreData实现的理解表明,地址簿应该是线程安全的,并且使得来自多个线程的查询应该没有问题。但是我很难在文档中找到关于线程安全的明确讨论。这引出了一些问题:地址簿线程安全和性能
- 在多线程上使用+ sharedAddressBook以安全地访问只读吗?我相信答案是肯定的。
- 对于后台线程的写入访问,您应该改为使用+ addressBook(并手动保存更改)。我是否理解正确?
- 有没有人调查过对多个线程进行多个同时查询到地址簿的性能影响?这应该与在多个线程上进行多个CoreData查询的性能非常相似。我的感觉是,通过进行并行查询,我可以获得很少的收益,因为我们假设他们在碰到SQLLite时会序列化,但我不确定。
我需要对AddressBook进行几十个查询(一些复杂的),并且在后台线程上使用NSOperation来避免阻塞UI(它目前所做的)。我的根本问题是,将最大并发操作设置为大于1的值是否有意义,以及如果应用程序也可能在另一个线程上同时写入AddressBook,是否存在任何危险。
地址簿框架目前(并非总是如此)使用核心数据是您应该忽略的实现细节,并不一定能保证线程安全。 你能提供一个链接指出地址簿API是线程安全的文档吗?我无法找到文档中描述的线程策略。 – 2009-07-16 14:53:30
我无法找到它。这是我在第一段中提到的观点。我无法在任何文档中找到有关使用AB进行线程化的明确讨论。但假设它不是线程安全的,就会产生很大的复杂性,这是不太需要的(我不能找到关于如何正确实现的文档),因此引发了这个问题。 – 2009-07-16 17:21:48