Люди спрашивают what is the way to run task in an thread. Один из ответов, принятый многими людьми (по ссылке), заключается в использовании GCD.Задача отправки в очередь для запуска задачи в другом потоке
Итак, я попытался таким образом, распечатав идентификатор потока, чтобы увидеть, если задача действительно выполняется в другом потоке после того, как поместить в очередь НОД:
// a function in MyService class
- (void) doTask {
NSLog(@"start do task on thread = %@", [NSThread currentThread]);
dispatch_queue_t queue = dispatch_queue_create("com.company.myqueue", DISPATCH_QUEUE_SERIAL);
dispatch_sync(queue, ^{
NSLog(@"execute task on thread = %@", [NSThread currentThread]);
});
}
Я бегу:
// this is not main thread [myService doTask]
выход консоли это:
start do task on thread = <NSThread: 0x15b4be00>{number = 6, name = (null)}
execute task on thread = <NSThread: 0x15b4be00>{number = 6, name = (null)}
это выглядит как задача НЕ выполняется в другом потоке, она находится в том же потоке, что и поток вызывающего. Я что-то неправильно понимаю? Почему GCD не выполняет задачу в отдельном потоке, но многие pepole принимают ответ в этой ссылке?
, если вы используете dispatch_async, которые они выполняли в другом потоке. –