C'est parti... Compilons le programme pour rigoler

. Cliquez sur le bouton
Build and Go ou faites
Cmd +
R. Le programme se compile et l'exécution s'affiche finalement dans la console Xcode !
Vous devriez obtenir quelque chose de ce genre :
Citation : Console Xcode[Session started at 2007-03-31 12:52:23 -0400.]
2007-03-31 12:52:24.929 TutorielOC[730] Hello, World!
TutorielOC has exited with status 0.
Eh oui, le fameux "Hello, World !", toujours lui !!!

. Jamais on s'en débarrassera ! En fait, c'est juste Xcode qui vous crée un projet viable au début... Il fallait faire un choix sur le premier programme à faire fonctionner... Ils ont choisi le plus connu

.
TutorielOC.m
Mais revenons au projet : cliquez sur le petit bouton avec une icône bleue dessus juste à côté du marteau en haut à gauche de votre fenêtre de projet. Sélectionnez le fichier
TutorielOC.m, voilà ce que vous devriez avoir :
Code : Autre1
2
3
4
5
6
7
8
9
10
| #import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// insert code here...
NSLog(@"Hello, World!");
[pool release];
return 0;
} |
Aïe ! C'est plus vraiment comme en C ! Vous commencez à découvrir l'Objective-C petit à petit...
Commençons par ce qu'on connaît plus ou moins. Déjà, je vous ai parlé de la directive de précompilation
#import, bah la voici à nouveau

, important dans notre fichier main
<Foundation/Foundation.h> qui est la framework par défaut.
Ensuite, la déclaration de la fonction
main() ; pas vraiment différent, là non plus. Il faut que cette fonction retourne un
int sinon GCC fait la gueule

, et cette fonction prend deux paramètres qui sont les valeurs inscrites dans la console lorsqu'on appelle le programme... On n'en a pas besoin, là.
Rentrons dans les accolades. On voit le
return 0; à la fin, signe que le programme s'est bien exécuté... Et juste au-dessus, un
Hello World dans une fonction
NSLog().
Quand un nom de fonction, de structure, de méthode ou de classe commence par NS, cela signifie qu'elle a été conçue par Apple, ou plus précisément par NeXT, l'entreprise que Steve Jobs a créée après son départ d'Apple dans les années 80. C'est l'entreprise qui a le plus contribué au développement de l'Objective-C en créant des frameworks complètes pour son système nommé NeXTSTEP, d'où le NS. Après le rachat de NeXT par Apple et le retour de Steve Jobs dans son entreprise, tout le travail réalisé par NeXT a été récupéré pour concevoir Mac OS X, et NeXTSTEP / OpenStep a été renommé Cocoa. Mais le préfix NS est resté depuis !
Donc, cette fonction
NSLog est l'équivalent de
printf(), à la différence que cette méthode prend une chaîne de caractères Objective-C, et non pas C. C'est l'un des premiers aspects de la différenciation Objective-C / C. En effet, Objective-C a l'avantage de bien différencier la partie
objet de la partie
procédurale dans les programmes, vous le verrez tout au long de ce tutoriel.
Les strings Objective-C
Les strings Objective-C ne sont que le premier aspect. Donc à chaque fois que je dirais qu'il faut une string, vous devrez entourer vos caractères de ces symboles
@"ma chaine", et à chaque fois que je parlerai de string C, vous utiliserez cette notation :
"ma chaine", sans les parenthèses bien sûr.
La string Objective-C n'est pas différente de la string C, vous pouvez faire tout ce que vous pouviez faire avec les chaînes C ; par exemple, si je veux afficher un entier dans ma string, il suffira d'écrire :
Code : Autre1
| NSLog(@"Un entier : %d\n",maVariable); |
Un petit symbole de format est ajouté en plus des :
%d,
%ld,
%f,
%Lf,
%s,
%c..., c'est le formateur
%@, c'est l'équivalent de
%s mais pour les chaînes de caractères Objective-C.
De la même façon que vous pouvez écrire ça :
Code : Autre1
| NSLog(@"Ma chaine C : %s","un exemple de chaine C"); |
vous pouvez écrire :
Code : Autre1
| NSLog(@"Ma chaine Objective-C : %@",@"un exemple de chaine Objective-C"); |
L'appel de fonction VS - L'envoi de message
Voilà pour ce qu'on connaît déjà... Maintenant, regardons ce qu'on ne connaît pas encore : la première instruction de
main() et l'avant-dernière !
Pour la première, il s'agit de la déclaration d'une NSAutoreleasePool qui sera utilisée pour la gestion de la mémoire (on ne va pas trop s'étendre là-dessus pour l'instant

) suivie de messages... Il s'agit d'appel de fonction mais pour des méthodes et des objets... Vous pouvez voir que ce n'est pas du tout écrit de la même façon... C'est même très bizarre au premier abord, n'est-ce pas ?

Bah, moi, c'est ce que j'aime en Objective-C : la partie procédurale en C est différenciée de la partie objet. Donc, difficile de se mélanger les pinceaux entre fonctions C et méthode d'un objet !
À chaque fois que je parlerai de fonction, il s'agira des fonctions C traditionnelles :
f().
Quand je parlerai de méthode, il s'agira des trucs tout bizarres qu'on va voir juste après

.