Leute fragen what is the way to run task in an thread. Eine der von vielen Leuten akzeptierten Antwort (vom Link) ist GCD zu verwenden.Aufgabe in die Warteschlange verschicken, um die Aufgabe in einem anderen Thread auszuführen
So habe ich versucht, auf diese Weise durch Thread-ID ausdrucken, um zu sehen, ob die Aufgabe wirklich in einem anderen Thread, nachdem sie in GCD-Warteschlange gestellt wird ausgeführt:
// 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]);
});
}
Ich betreiben:
// this is not main thread [myService doTask]
Die Konsolenausgabe ist:
start do task on thread = <NSThread: 0x15b4be00>{number = 6, name = (null)}
execute task on thread = <NSThread: 0x15b4be00>{number = 6, name = (null)}
Es sieht Wenn die Aufgabe NICHT in einem anderen Thread ausgeführt wird, befindet sie sich im selben Thread wie der Thread des Aufrufers. Versteh ich etwas falsch? Warum führt GCD die Aufgabe nicht in einem separaten Thread aus, aber viele pepole akzeptieren die Antwort in diesem Link?
Wenn Sie dispatch_async verwenden sie in einem anderen Thread ausgeführt. –