comme nous le savons main_queue est une série queue.There est pas async réel.il n'y a pas async dans la file d'attente principale?
- (void)someMethod{
dispatch_async(dispatch_get_main_queue(),^{
NSLog(@"main_async invoke");
});
NSLog(@"method invoke");
}
le code ci-dessus « méthode Invoke » sera écrire avant « main_async invoquer » .car dans main_queue il n'y a pas async réel. mais le code ci-dessous peut sai NO:
- (void)someMethod{
__block BOOL flag=YES;
NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"blockOperation invoke");
[NSThread sleepForTimeInterval:4];
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"main_async invoke");
flag=NO;
});
}];
[blockOperation start];
while (flag) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.5]];
}
NSLog(@"method invoke");
}
le code ci-dessus « méthode Invoke » sera écrit après « main_async invoquer » Je pense qu'il est à cause des « il RunLoop'.Is quelqu'un peut expliquer c'est pourquoi?
Que voulez-vous dire "réel async"? Dans votre premier exemple, le bloc est exécuté de manière asynchrone. Comme vous le signalez, la file d'attente principale est une file d'attente série et, comme les tâches ne sont pas préemptées, le bloc ne s'exécutera pas avant le retour de la méthode en cours, mais il est toujours asynchrone. Peut-être que vous voulez dire l'exécution parallèle, et non cela ne peut pas arriver sur n'importe quelle file d'attente en série. – Paulw11
Je peux comprendre le premier exemple. Ma question est pourquoi dans le second exemple, 'NSLog (@ "main_async invoke")' s'exécute avant 'NSLog (@ "méthode invoke")' Dans ma compréhension le bloc n'exécutera pas jusqu'à un certain temps après le retour de la méthode actuelle. Dans le deuxième exemple, le bloc s'exécute avant le retour de la méthode en cours. – DoradoIs90
Parce que dans le deuxième bloc vous démarrez directement l'opération. Vous ne le soumettez pas à une file d'attente d'opérations pour une exécution ultérieure. – Paulw11