Je suis un peu nouveau pour bloquer et avoir besoin d'aide. Je souhaite stocker un bloc dans un NSDictionary code> et exécuter ledit bloc lorsqu'il est accédé en fonction de la clé
code>. Voici ce que j'ai jusqu'à présent qu'un exemple.
NSDictionary *blocks = [NSDictionary dictionaryWithObjectsAndKeys:
^{NSLog(@"Log Block 1");}, @"Block1",
^{NSLog(@"Log Block 2");}, @"Block2",
nil];
3 Réponses :
Essayez ceci:
void(^myAwesomeBlock)() = [blocks objectForKey:key]; myAwesomeBlock();
Merci, cela a travaillé pour moi. Je remarquai cependant que lorsque lorsque les appels ultérieurs sont apportés à chaque bloc, cela renvoie les mêmes informations que lorsqu'elle a été exécutée pour la première fois plutôt que d'inclure tout ce qui pourrait avoir changé depuis. Existe-t-il un moyen de le faire exécuter à chaque fois que c'est appelé plutôt que de renvoyer les informations originales?
Il s'exécute à chaque fois, mais il capture des variables externes quand elle est copiée, plutôt que lorsqu'elle est exécutée.
Vous devez lancer:
id bar = [blocks objectForKey:@"Block1"]; ((void(^)())bar)();
J'ai remarqué que, lorsque lorsque des appels ultérieurs sont apportés à chaque bloc, il renvoie les mêmes informations que lorsqu'elle a été exécutée pour la première fois que d'inclure tout ce qui pourrait avoir changé depuis. Existe-t-il un moyen de le faire exécuter à chaque fois que c'est appelé plutôt que de renvoyer les informations originales? Strong> p> blockQuote>
Reportez-vous à la documentation sur les blocs, spécifiquement la section intitulée Types de variable : P>
Les règles suivantes s'appliquent aux variables utilisées dans un bloc: p>
Pile (non statique) Les variables locales à la portée lexicale enfermante sont capturées sous forme de variables
const code>. p>
Leurs valeurs sont prises au point de l'expression de bloc dans le programme. Dans des blocs imbriqués, la valeur est capturée de la portée de la société la plus proche. P> li>
variables locales à la portée lexicale enfermée déclarée avec le modificateur de stockage
__ (code> est fourni par référence et sont mutables. P>
Toute modification est reflétée dans la portée lexicale enfermante, y compris tout autre bloc défini dans la même portée lexicale enfermante. Ceux-ci sont discutés plus en détail dans "le type de stockage __block". P> li> ul> blockQuote>