L'inversion de contrôle (IOC), les Delegates et les Protocoles dans Cocoa/Cocoa Touch d'Apple

NeXT, le dernier des Pharaons

Après être passé par une alternance de phases d’amour et de haine avec l’univers Apple, qui remonte à l’époque du NeXT et de NeXTStep, j’ai finalement tourné le dos à la chambre des tortures que représentaient pour moi Objective-C/XCode/Cocoa et l’iPhone. Nous n’avons jamais vraiment été copain avec cet environnement, fermé et si exotique.

Pourtant, jeune, j’étais fasciné par cet ovni qu’était le NeXT. J’ai encore tout un dossier fait d’articles découpés dans la presse et surtout d’archives données par un ancien de chez NeXT France (Salut à toi, oh cher Christophe D.). Je garde ces reliques très religieusement, rangés à l’abri des regards, dans l’Enfer de ma Bibliothèque…

Seulement parfois, il y a rechute !

Mon smartphone Android fait un plat de trop, fatal, dans le parking et voilà que je dois ressortir du placard le dernier iPhone acquis, le 5S, que j’avais sans douté troqué contre un rein aux environs de 2013/2014.

Dès le redémarrage, j’ai senti le choc ! (comme dirait l’ami Nougaro).

Une fois la bête rechargée et sorti de son sommeil, tout n’est que luxe, calme et volupté. Rien n’a changé, tout fonctionne à la perfection, quasi immédiatement et surtout le temps ne pas avoir eu de prise. L’interface est soignée jusque dans le moindre détails et n’a pas pris une ride. Il s’est pourtant passé presque 10 ans depuis la sortie de cet iPhone… Une question me taraude; quel est le secret de cette longévité ?

Le secret de longévité

Et me voilà replongé dans mes vieux bouquins de développeur iOS, Objective-C, le framework Cocoa/Cocoa Touch et même SWIFT, à la recherche d’indices.

Bien sûr il y a Objective-C, qui est à la fois un langage bas niveau (compilé, léger, rapide), et orienté-objet. Car oui,c’est une surcouche au langage C, à l’instar du C++. Ce qui est gage de rapidité et surout d’être en osmose avec le matériel sur lequel il s’exécute, Apple controlant tout, du hardware au software, ce qui est un cas unique à ma connaissance, et c’est encore plus vrai depuis l’annonce récente du processeur M1.

IOC

Mais il y a aussi le Design Pattern IOC, soit l’inversion de contrôle dans la langue de Voltaire.

L’inversion de contrôle consiste à donner le pouvoir aux objets du framework (Cocoa/Cocoa Touch) et à mettre en place les liaisons et le code délégué dont se servira l’objet pour accomplir un traitement.

C’est un peu comme dans le bureau du shérif du temps des grands westerns. On y trouvait généralement le représentant de la loi, les bottes sur le bureau, à faire quelque chose de très important; à savoir une bonne sieste,.. Alors que pendant ce temps, dehors, son adjoint se tapait toutes les corvées. C’est un peu ça, l’inversion de contrôle :)

Et à qui va-t-on s’adresser en cas de problème ? Au shérif, qui va à son tour demander à son adjoint d’aller faire le boulot.

Ainsi, dans le cas d’une application iPhone, l’utilisateur agit sur l’application en touchant les objets de l’interface (bouton, curseur, etc… ), objet qui va demander à son adjoint (délégué) de récupérer les données du contrôle comme prévu par le protocol et faire le travail en appellant les fonctions déléguées qui se trouvent dans votre controlleur.

Delegate

Pour que la communication entre un object d’interface et votre code puisse s’établir, afin que les données s’échangent dans les deux sens, il faut appliquer le protocol requis par l’objet utilisé.

C’est un peu comme s’il avait été convenu entre le shérif et son adjoint que celui qui ferme en dernier le bureau cache la clé sous le deuxième pot de fleur de la fenêtre de gauche.

La suite au prochain épisode…