在dispatch_queue_t上调用执行是否确保它们在同一个线程上?

Nic*_*k C 1 multithreading nsthread grand-central-dispatch ios objective-c-blocks

如果我像这样存储dispatch_queue_t:

@property(assign, nonatomic) dispatch_queue_t myQueue;
Run Code Online (Sandbox Code Playgroud)

...

_myQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
Run Code Online (Sandbox Code Playgroud)

后来,当我做手术时

dispatch_async(_myQueue, ^{
  NSLog(@"Hi!");
});
Run Code Online (Sandbox Code Playgroud)

然后在其他地方

dispatch_async(_myQueue, ^{
  NSLog(@"Hello!");
});
Run Code Online (Sandbox Code Playgroud)

这些块是在同一个线程上执行的吗?如果没有,我该如何确保它们?基本上我想保留对线程的引用,并使其仅在该线程上执行某些操作.

Mar*_*n R 5

线程如何分配给队列是Grand Central Dispatch的实现细节.分派到(串行或并发)队列的两个块不一定在同一线程上执行.唯一的例外是"主队列",它只在主线程上执行.

如果您确实要求代码在同一个线程上执行,则必须使用不同的线程方法,例如NSThreadpthread_create.