2010-09-16 6 views

Répondre

4

Oui, pour la plus grande partie. Les blocs sont kind-of fonctions C traitées kind-of comme des objets qui peuvent capturer des variables de la portée environnante. Les fonctions anonymes sont équivalentes à des blocs, mais certainement pas identiques en raison de la machinerie de blocs en coulisses plutôt compliquée. Par exemple, si vous prévoyez d'utiliser un bloc après/en dehors de la fonction/méthode qui définit le bloc n'est plus actif - c'est le cas si vous définissez le bloc comme une propriété quelque part ou utilisez dans GCD (un multi -core bibliothèque de mise en file d'attente d'opération), vous devez le copier avec Block_copy() (ou [aBlock copy]). Je ne vais pas entrer dans les détails, mais ce n'est certainement pas quelque chose que vous faites avec les fonctions JS (anonymes). Cela a à voir avec le fait que le bloc les littéraux sont alloués sur la pile (et pas quelque part dans le code) et que vous devez le copier dans le tas si vous voulez qu'il persiste.

Cela peut devenir assez compliqué (mais plutôt beau dans sa conception), mais pour la plupart des cas d'utilisation, c'est plutôt facile et vous pouvez le traiter comme des fonctions JS anonymes. ;-)

3

Oui. Les blocs dans Objective-C sont des fermetures.

Questions connexes