ABAddressBookRef
只能被一个线程访问。我认为一个好的模型会ABAddressBookRef
在后台有一个线程,除了主线程。
如何确保使用时只有一个线程NSOperationQueue
?简单地将最大并发设置为 1 并不能保证它在同一个线程上运行。
我应该使用其他独特的线程,如网络线程吗?
ABAddressBookRef
只能被一个线程访问。我认为一个好的模型会ABAddressBookRef
在后台有一个线程,除了主线程。
如何确保使用时只有一个线程NSOperationQueue
?简单地将最大并发设置为 1 并不能保证它在同一个线程上运行。
我应该使用其他独特的线程,如网络线程吗?
You can manually create a thread and redirect all address book access to it.
You create a thread with something like this (adapted from documentation):
NSThread* myThread = [[NSThread alloc] initWithTarget:[MyThread new]
selector:@selector(myThreadMainMethod)
object:nil];
[myThread start]; // Actually create the thread
Note that for the thread to be useful, you have to implement a run loop in thread's main method.
See example implementation of run loop in this answer.
You are then able to do stuff on this thread using the NSObject
's method performSelector:onThread:withObject:waitUntilDone:
.
Here's a wrapper library for ABAddressBookRef
that implements this concept – RHAddressBook.