Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

2 réponses
Avatar
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>

2 réponses

Avatar
Patrick Stadelmann
In article <1k7xo22.ab3u9s1jgcohwN%,
(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
Avatar
ftestuz
David Remacle wrote:

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 ?



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