[Objective-C] "Blocks" ça sert à quoi ?

Le
listes
Salut,

J'ai regardé le tutoriel

http://www.youtube.com/watch?v=1wjgcQGSx3U

qui parle d'une construction dite "block" dans le code Objective-C.

Et au vue de ce tutoriel, je me pose la question à quoi sert cette
construction de code ?

exemple :

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

int (^add)(int, int) = ^(int num1, int num2) {
return num1 + num2;
};

NSLog(@"%d", add(5,2));


[pool drain];
return 0;
}

En quoi ça simplifie le code et est-ce fort utilisé en réel dans les
codes des programmes ?

--
David Remacle
<http://www.clampin.com>
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrick Stadelmann
Le #23778481
In article (David Remacle) wrote:

Et au vue de ce tutoriel, je me pose la question à quoi sert cette
construction de code ?



http://developer.apple.com/library/mac/#featuredarticles/BlocksGCD/

Patrick
--
Patrick Stadelmann
ftestuz
Le #23778541
David Remacle
Salut,

J'ai regardé le tutoriel

http://www.youtube.com/watch?v=1wjgcQGSx3U

qui parle d'une construction dite "block" dans le code Objective-C.

Et au vue de ce tutoriel, je me pose la question à quoi sert cette
construction de code ?

exemple :

#import
int main (int argc, const char * argv[])
{

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

int (^add)(int, int) = ^(int num1, int num2) {
return num1 + num2;
};

NSLog(@"%d", add(5,2));


[pool drain];
return 0;
}

En quoi ça simplifie le code et est-ce fort utilisé en réel dans les
codes des programmes ?



Dans d'autres langages, ça s'appelle des closures ou des fonctions
anonymes. Je te laisse regarder ce qu'est des closures, les articles du
web diront moins de conneries que moi.

Sinon, il est clair que l'exemple que tu donnes n'apporte pas grand
chose. Une simple fonction remplira le même rôle très bien.

Tu peux utiliser dans le block des variables qui sont définie en dehors
du blocks. A l'intérieur du block ces variables sont alors définie en
const et leur valeur capturée au point de création du block. Ceci est la
première grande différence avec un appel de fonction classique, cette
dernière n'a pas accès aux variables locals de l'appelant.

Ensuite, il est possible de copier un block. Ainsi à partir d'un extrait
de code unique, tu pourras le faire tourner avec différents noms dans
différentes conditions.

Apple utilise énormément les blocks pour remplacer les fonctions
callback. Il devient beaucoup plus simple à écrire le callback, et d'un
point de vue de lisibilité du code, le callback est écrit là où il est
transmit à la fonction qui demande le callback.

Regarde les exemples d'Apple pour utiliser GCD.

--
Frédéric Testuz
Publicité
Poster une réponse
Anonyme