Les blocs sont géniaux. Parce que je pensais les avoir compris, je voulais les mettre en valeur et les utiliser dans une situation un peu plus complexe. Maintenant, ces blocs me donnent des coups de pied dans le visage, et j'essaie de les décomposer en morceaux compréhensibles. Dire que j'ai deux blocs dans ce pseudo code commodément nommé blockA
et blockB
. Le premier est un simple bloc sans paramètre et il imprime simplement une ligne. Le second prend un paramètre xyz
de type id
:Comment envoyer un bloc avec un paramètre sur la file d'attente ou le fil principal
void (^blockA){ NSLog(@"Doing something"); };
void (^blockB)(id xyz){ [xyz doSomething]; };
Lors de l'exécution blockA
, je ferais quelque chose comme blockA();
ou quand je veux cibler la principale file d'attente/thread, j'utiliser la méthode dispatch_sync
ou _async
:
dispatch_sync(dispatch_get_main_queue(), blockA);
Mais même si je sais comment distribuer blockB
avec un paramètre comme blockB(someObject);
, je n'arrive pas à comprendre comment appeler explicitement celui-là sur le thread principal. Je cherchais quelque chose comme la ligne suivante, mais bien sûr, qui est pas comment cela fonctionne:
dispatch_sync (dispatch_get_main_queue, BLOCKB, someObject); Maintenant, j'ai essayé d'envelopper le bloc dans un autre bloc, mais pour être honnête, cela n'a pas l'air juste et il semblait que cela causait plus de problèmes que cela a résolu. Y a-t-il autre chose que des blocs d'emballage pour distribuer un bloc avec un ou plusieurs paramètres sur la file d'attente/le thread principal?
Je reçois un accident de verrouillage web terrible, que je ne peux pas remonter à son origine: * Essayé pour obtenir le verrou web à partir d'un autre thread que le fil principal ou le fil web. Cela peut être le résultat d'un appel à UIKit à partir d'un thread secondaire. Crashing now ... * C'est pourquoi je suis en train de résoudre le problème, car tout code exécuté à ce moment-là aurait du tourner sur le thread principal. Je pensais que l'emboîtement des blocs pouvait avoir causé cela, mais d'après ce que vous dites, il semble que ce soit quelque chose d'autre. – epologee
Quelle est la différence de simplement utiliser l'objet dans le bloc ?, et je pense que ce que vous vouliez définir est 'dispatch_async (dispatch_get_main_queue(),^{block (object);});'? – izzy