J'ai récemment travaillé sur un projet qui implique la récupération de données en arrière-plan et j'ai remarqué que les blocs dispatch_async envoyés à la file d'attente principale ne s'exécutent pas.
Conditions d'essai : - L'application a des capacités de récupération en arrière-plan et de notification à distance. - Lancement via Scheme Configuré pour être lancé via Background Fetch sur un iPhone 6S Plus
Exemple de code :
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Won't run");
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
NSLog(@"I ran");
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Won't run");
});
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"Won't run");
});
});
return YES;
}
Questions : 1) Quelqu'un sait-il pourquoi il en est ainsi ? Je ne trouve aucune documentation. Il est vrai que je cherche peut-être au mauvais endroit - jusqu'à présent, j'ai vérifié la documentation GCD sur dispach_async et j'ai fait quelques recherches approfondies sur le web. 2) Existe-t-il d'autres moyens (de préférence basés sur la GCD) de faire des appels asynchrones au thread principal, même en arrière-plan ?
Edit : performSelectorOnMainThread : ne semble pas fonctionner non plus.