Warum blockiert der Aufruf von dispatch_sync () in der Hauptwarteschlange die Hauptwarteschlange?

Ich weiß, dass dies keine starke Frage ist, aber ich muss mich über dieses Konzept klar werden.

Ich habe definiertmyBlock wie folgt.

void(^myBlock)(void) = ^{
   for(int i = 0;i < 10 ; i++)
   {
       NSLog(@"%d and current queue = %@",i,[NSThread currentThread]);
   } 
};

Jetzt inviewDidLoad Methode, wenn ich diedispatch_sync() Methode unabhängig von der Hauptwarteschlange, dann wird die Hauptwarteschlange blockiert.

Hier ist das Beispiel.

- (void)viewDidLoad
 {
    [super viewDidLoad];
    dispatch_queue_t queue = dispatch_get_main_queue();
    dispatch_sync(queue,myBlock);
 }

Aber wenn ich das selbe benutzedispatch_sync() Funktion auf Hauptthread Innerhalb eines Blocks vondispatch_async() Funktion, die in der gleichzeitigen Warteschlange ausgelöst wird, dann wird der Hauptthread nicht blockiert.

Hier ist das Beispiel.

- (void)viewDidLoad
 {
    [super viewDidLoad];
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    dispatch_async(queue,^{  

        dispatch_sync(dispatch_get_main_queue(),myBlock);
    });
 }

Mir ist nicht klar, warum das passiert? Warum Hauptthread beim Aufrufen blockiertdispatch_sync() unabhängig?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage