Objective-C : les fondamentaux pour le développement iOS 6 Objective-C : envoyer des messages à un objet

Objective-C est une extension du C. Toute la syntaxe C est reconnue et peut être utilisée. Le C ayant servi de base aux langages les plus répandus et les plus enseignés aujourd'hui, nous ne redétaillerons pas sa syntaxe.

Toutes les extensions ajoutées par Objective-C au langage C visent à permettre la programmation orientée objet. Un des éléments les plus importants est l'envoi de messages - c'est aussi cela qui rend le langage très surprenant au premier abord.

Envoyer des messages à un objet

Les envois de message se font en utilisant la syntaxe suivante :

 [destinataire message];

Le premier élément entre crochets est l'objet qui recevra le message et le deuxième élément est le nom du message à envoyer.

// Équivalent en Java : 
destinataire.message();

Il est bien sûr possible d'ajouter des paramètres. En Objective-C, les paramètres des méthodes sont nommés :

[destinataire message:argument1 etArgument2:argument2];
[string stringByReplacingOccurrencesOfString:@"iPhone"
withString:@"iPod"];

Ici, on remarque que le nom de la méthode contient aussi le nom du premier argument. Ainsi, stringByReplacingOccurrencesOfString est le nom de la méthode et il contient le nom du premier argument. withString est le nom du deuxième argument.

// Équivalent en Java :
string.replaceAll("iPhone", "iPod");

Le nommage des paramètres est une des spécificités d'Objective-C. À l'usage, cela économise énormément de temps puisqu'il n'est plus nécessaire d'ouvrir la documentation pour voir quels sont les paramètres à passer, dans quel ordre, etc.

 

ATTENTION Signature de méthode en Objective-C

Bien que les arguments soient nommés, ils ne sont pas interchangeables. Leur ordre fait partie de la signature de la méthode. Ainsi, dans l'exemple, les signatures des méthodes sont : message, message:, et Argument2:, ou encore : stringByReplacingOccurrencesOfString:withString:.


Il est également possible de récupérer une valeur de retour :

NSObject *returnedObject = [destinataire message:argument1];

et de chaîner plusieurs appels de méthodes :

NSObject *returnedObject =
[[destinataire message] faisQuelquechoseAvec];