Introduction
Le débutant en Objective-C va rapidement chercher les classes utilitaires du langage, un peu comme le développeur C++ va chercher à comprendre la STL.
Nous allons ici expliquer avec quelques exemples, les classes :
– NSLog
– NSMutableString et NSString
– NSArray et NSMutableArray
– NSMutableDictionary et NSDictionary
– NSEnumerator
– NSDate et NSDateFormatter
NSLog
Cette classe est toute simple, elle permet d’afficher dans la console des chaînes de caractères.
NSLog(@"Hello Objective-C");
On remarque la chaîne de caractère démarre par un @. Une chaîne C au contraire, ne démarre pas par @.
NSMutableString et NSString
Comme quasiment toutes les classes utilitaires Objective-C, il existe la version mutable et la version constante. La chaîne de caractère est codée en Unicode, c’est à dire qu’un caractère occupe 2 octets.
Création d’un chaîne constante
NSString * ps = @"coucou";
C’est la méthode la plus simple et la plus performante pour créer une chaîne. On remarque qu’ici la création d’un objet n’apparaît pas.
NSString * ps2 = [NSString stringWithFormat:@"date = %@", [NSDate date]];
Seconde méthode de création d’un chaîne avec une méthode statique : la chaîne comporte une partie constante et une partie dynamique : ici on prend la date d’aujourd’hui.
Remarque : En cas où vous n’utilisez pas l’ARC, sachez que vous n’aurez pas à faire de release sur l’objet, celui-ci est en autorelease. Il s’agit ici d’une des méthodes de création les plus utilisée.
NSString * ps3 = [[NSString alloc] initWithFormat:@"date = %@", [NSDate date]];
Ici on appel le constructeur surchargé initWithFormat:. Sans l’ARC on aura à relâcher notre objet.
Longueur de la chaîne
int longueur = ps.length;
Retourne la longueur de la chaîne.
Chercher un caractère à une position donnée
unichar c = [ ps characterAtIndex: 1];
On cherche le caractère à la seconde position. le type unichar représente un caractère en unicode.
unichar c2 = [ ps characterAtIndex:10];
Ici on cherche un caractère à une mauvaise position -> SIGABRT (crash)
NSMutableString et se méthode append:
NSMutableString * pms = [NSMutableString stringWithFormat:@"%@", ps3]; [pms appendString:@" du jour"];
Création d’un chaîne modifiable. Le message appendString: permet d’ajouter une autre chaîne.
NSArray et NSMutableArray
Ces classes permettent de gérer des tableaux.
Création d’un tableau
NSArray * pArray = [NSArray arrayWithObjects:@"1", @"2", nil];
Cette méthode statique permet de créer un objet contenant 2 objets qui sont des NSString. On remarquera le mot clé nil pour délimiter la fin du tableau (obligatoire).
En modern objective-c :
pArray = @[@"3", @"4"];
Apple a introduit modern objective-C. Si votre compilateur le permet (à partie de XCode 4.4), cette syntaxe simplifiée est beaucoup plus aisée que la syntaxe à base de crochets. Ici pas de mot clé nil.
Itération dans un tableau
for( int t = 0; t < pArray.count; t++ ) { NSLog( @"%@", [pArray objectAtIndex:t]); }
Pour obtenir le nombre l’éléments dans un tableau on utilise la propriété count. La méthode objectAtIndex: permet d’obtenir un objet à un index donnée. Attention si un mauvais indice est passé à objectAtIndex: c’est le crash assuré.
Enumération des éléments d’un tableau
NSEnumerator * pEnumerator = [pArray objectEnumerator]; id obj = nil; while( obj = [pEnumerator nextObject] ) { NSLog( @"%@", obj ); }
L’idée ci-dessus est de démontrer comment utiliser un énumérateur (pattern du GOF) pour parcourir le tableau. Il à noter que ce mécanisme est également disponible dans le dictionnaire. [pArray objectEnumerator] retourne un objet du type NSEnumerator qui va nous permettre de parcourir le tableau. [pEnumerator nextObject] retourne l’objet suivant jusqu’à nil pour signaler la fin du tableau.
Obtenir le dernier objet du tableau
id o = [pArray lastObject];
Méthode très pratique pour obtenir l’objet qui se trouve sur le dernier index.
Un objet est-il présent dans le tableau ?
if( [pArray containsObject:o] ) { //... }
Message permettant de savoir si notre tableau contient un objet donné.
Manipulation du système de fichiers
NSFileManager * pFileManager = [NSFileManager defaultManager]; NSString * pPath = [NSString stringWithFormat:@"%@/monFichier.xml", [pFileManager currentDirectoryPath]]; NSLog(@"%@", pPath);
Petite digression pour ici calculer le path d’un fichier qui sera utilisé plus bas. NSFileManager est une classe très importante qui permet de gérer le système de fichier (ou un système de fichier). [NSFileManager defaultManager] retourne le système de fichier courant. [pFileManager currentDirectoryPath] nous retourne le répertoire courant de notre programme, on ajoute le nom d’un fichier XML : tout est prêt pour la suite.
Ecriture d’un tableau sur disque en XML
BOOL b = [pArray writeToFile:pPath atomically:YES]; if( b== YES ) { NSLog(@"OK"); }
La fonction ci-dessous permet de sérialiser l’objet sur disque en XML, suivant un schéma Apple.
NSDictionary et NSMutableDictionary
Le dictionnaire est très utilisée : il permet de ranger des objets avec une clé. clé: valeur.
Création d’un dictionnaire
NSDictionary * pDict = [[NSDictionary alloc] initWithObjects:pArray forKeys:@[@"key1", @"key2"]];
Création d’un dictionnaire avec un constructeur. Le premier paramètre est un tableau d’objets, le second est un tableau des clés correspondantes.
Création d’un dictionnaire en modern Objective-C
pDict = @{@"key3" : @"5", @"key4" : @"6"};
Création d’un dictionnaire en modern Objective-C. Cette syntaxe est utilisée depuis 2012.
Nombre d’éléments dans le dictionnaire
int nbr = pDict.count;
Retourne le nombre d’éléments dans le dictionnaire.
Obtenir un objet à une clé donnée
id objet = [pDict objectForKey:@"key3"];
La méthode [pDict objectForKey:@ »key3″] retourne l’objet qui se trouve à la clé key3.
Obtenir toutes les clés et tous les objets
NSArray * pArray2 = [pDict allKeys]; pArray2 = [pDict allValues];
La méthode allKeys retourne un tableau de toutes les clés. La méthode allValues retourne le tableau des objets.
Ecrire le dictionnaire sur disque
b = [pDict writeToFile:pPath atomically:YES];
La méthode writeToFile: permet de sérialiser l’objet sur disque en XML.
NSDate – NSDateFormatter – NSLocale
La gestion des dates est faite par la classe NSDate. NSDateFormatter est utilisé pour gérer une chaîne de caractères qui représente la date : avec l’heure ou pas, en format court, intermédiaire ou long. La classe NSLocale permet de gérer le code ISO d’un pays donné.
Création d’une date
NSDate * pDate = [NSDate date];
Créer un objet du type NSDate avec le moment présent.
Calcul d’une date par rapport à une autre
NSTimeInterval ti = [pDate timeIntervalSince1970];
NSTimeInterval n’est pas une classe mais un typedef. En fait c’est un double qui retourne le nombre de milli-secondes depuis le 1er Janvier 1970 (timer UNIX).
Calcul d’une date par rapport à une chaîne de caractères
NSDate * pDate2 = [NSDate dateWithString:@"1963-04-20 12:00:00 +0000"];
Cette méthode statique permet de créer un objet depuis une chaîne. A noter que la chaîne est un format standard : « YYYY-MM-DD HH:MM:SS +/-XXXX ».
NSDateFormatter – chaîne de représentation
NSLocale * pLocale = [NSLocale currentLocale]; NSDateFormatter * pDF = [[NSDateFormatter alloc]init]; [pDF setLocale:pLocale];
Le message [NSLocale currentLocale] retourne un objet qui contient le code ISO du pays courant. [pDF setLocale:pLocale] présente le code pays dans un objet du type NSDateFormatter.
Précision du format de la date
[pDF setTimeStyle:NSDateFormatterFullStyle]; [pDF setDateStyle:NSDateFormatterLongStyle];
Ici on fixe les styles pour la chaîne de caractère qui représentera la date. Par exemple format court, moyen ou long.
NSLog( @"%@", [pDF stringFromDate:pDate2] );
La méthode stringFromDate d’utiliser de calculer la chaîne de représentation d’une date, avec une date et son format de représentation.
J’espère que cet article vous a été utile.
N’hésitez pas à le partager avec la communauté en cliquant ci-dessous.
Au sujet du formateur

Bertrand Leclercq
Expert iOS et Android, aide votre entreprise à développer sur mobile, anime vos formations développeurs, conseille vos équipes
Contacter le formateur