如何确保NSOperationQueue仅使用一个线程?

时间:2013-05-21 02:42:15

标签: multithreading cocoa nsoperationqueue abaddressbook

ABAddressBookRef只能由一个线程访问。我认为一个好的模型除了主线程之外还会在后台有ABAddressBookRef的线程。

如何在使用NSOperationQueue时确保只有一个帖子?简单地将max concurrency设置为1并不能保证它在同一个线程上运行。

我应该使用其他独特的线程,如网络线程吗?

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