ABAddressBookRef
只能由一个线程访问。我认为一个好的模型除了主线程之外还会在后台有ABAddressBookRef
的线程。
如何在使用NSOperationQueue
时确保只有一个帖子?简单地将max concurrency设置为1并不能保证它在同一个线程上运行。
我应该使用其他独特的线程,如网络线程吗?
答案 0 :(得分:1)
您可以手动创建线程并重定向所有通讯簿访问权限。
你用这样的东西创建一个帖子(adapted from documentation):
NSThread* myThread = [[NSThread alloc] initWithTarget:[MyThread new]
selector:@selector(myThreadMainMethod)
object:nil];
[myThread start]; // Actually create the thread
请注意,要使线程有用,您必须在线程的main方法中实现一个运行循环。
See example implementation of run loop in this answer
然后,您可以使用NSObject
的方法performSelector:onThread:withObject:waitUntilDone:
在此主题上执行操作。
这是ABAddressBookRef
的包装库,它实现了这个概念 - RHAddressBook。