2010-09-20 7 views

Répondre

8

La puissance des blocs est comme des fermetures lexicales (aussi connues sous le nom de lambdas dans des langages tels que Python ou C#). Ainsi, vous pouvez faire

// within other code 

int myVar; 

int (^multiplyClosure)(int) = ^(int num1) { 
    return num1 * myVar; 
}; 

Vous pouvez ensuite passer ce bloc autour et il gardera un (copie) de myVar. Ainsi, une fermeture est vraiment code et contexte et c'est là que réside le pouvoir.

2

Le but de cet exemple est de vous montrer comment les blocs sont créés et ce qu'ils peuvent faire. C'est comme l'exemple du "hello world" que vous trouverez dans presque tous les livres mais pas dans une application réelle. C'est juste là pour illustrer un concept.

4

Dans cet exemple particulier, même une fonction serait inappropriée, car elle est arithmétique de base. Cependant, l'exemple sert à vous montrer la syntaxe et les conventions d'appel pour les blocs.

Les blocs eux-mêmes sont plus utiles comme callbacks ou comme "glisser-déposer". Ils sont un moyen de faire des délégations et des extensions de code sans avoir à construire des fonctions avec état ou à déléguer des classes, et sans avoir à fournir l'argument omniprésent void *contextInfo à chaque callback.

1

Il n'y a pas de problème de synchronisation en bloc. Considérant que vous faites des choses en multithread, les deux paramètres de "Multiply" sont partagés par d'autres threads. Ils ne seront pas modifiés par un autre thread car ils sont en "fermeture", donc vous n'avez pas besoin de verrouiller sth et cela gardera le code simple.

Questions connexes