GCD是否确保在同一队列中工作的所有块始终在同一个线程中工作?(关于ABAddressBookRef)

Jim*_*mmy 2 thread-safety addressbook grand-central-dispatch objective-c-blocks

GCD是否确保在同一队列中工作的所有块始终在同一个线程中工作?

如果我为此队列创建一个调度队列和dispath_async块,那么调度到该队列的所有块是否都在同一个线程中工作?

由于我正在开发一个使用ABAdrressbook Framerowk的项目,并且该文档说不能在线程之间使用ABAddressBookRef和ABRecordRef,所以我想知道队列中的所有块是否都在同一个线程中,我只能创建一个AddressBookRef为那个队列.

Jer*_*man 6

绑定到特定线程的唯一队列是主队列,它绑定到主(UI)线程.

如果唯一的要求是不同时访问对象,使用串行队列应该可以正常工作.

如果对象依赖于线程本地状态,则必须强制所有操作到特定线程.最简单的方法是将你的串行队列定位到主线程,但只有当你知道你不会长时间陷入困境时才会有效.否则,您将挂起您的UI.在这种情况下,您将必须创建自己的处理程序线程并在那里发送工作.