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?