Objective-C: Un Regard sur l'Héritage du Développement iOS

5 min de lecture

1. Introduction à Objective-C

1.1. Naissance et premiers pas

Objective-C est né au début des années 1980, fruit de la collaboration entre Brad Cox et Tom Love. Leur objectif était de combiner la puissance et la flexibilité du langage C avec les avantages de la programmation orientée objet apportés par Smalltalk. Cette fusion a donné naissance à un langage dynamique, capable de passer des messages entre objets, tout en conservant la performance du C.

1.2. La relation unique avec Apple

La relation d'Objective-C avec Apple a commencé quand la société a décidé d'adopter ce langage pour le développement de son système d'exploitation NeXTSTEP, précurseur de macOS. L'acquisition de NeXT par Apple en 1996 a solidifié le rôle d'Objective-C comme langage principal pour le développement des systèmes et applications Apple pendant de nombreuses années. Cette adoption a propulsé Objective-C au-devant de la scène, en faisant le langage de choix pour développer des applications sur macOS, puis plus tard sur iOS.

1.3. Importance pour iOS

Avec le lancement de l'iPhone en 2007 et de l'App Store en 2008, Objective-C est devenu le pilier du développement d'applications mobiles pour iOS. Les développeurs du monde entier ont appris ce langage pour tirer parti de la croissance explosive de la plateforme mobile d'Apple. Durant cette période, la majorité des applications iOS ont été écrites en Objective-C, et le langage a offert un écosystème riche en frameworks et outils, comme UIKit et Foundation, qui ont façonné l'expérience de développement sur iOS.

2. Caractéristiques Distinctives d'Objective-C

2.1. Syntaxe et style de codage

Objective-C présente une syntaxe unique qui se distingue des autres langages de programmation courants. Alors que les langages tels que C et C++ utilisent des fonctions et des méthodes, Objective-C utilise une syntaxe de message-passing basée sur les crochets :

1[object method:parameter];

Contrairement à la notation dotée couramment utilisée dans d'autres langages pour appeler des méthodes, Objective-C préfère une syntaxe verbale et descriptive.

2.2. Message Passing vs Appel de Fonction

L'une des principales caractéristiques d'Objective-C est son système de "message passing". Plutôt que d'appeler directement des méthodes, on "envoie des messages" à des objets. Cette approche offre une flexibilité exceptionnelle, permettant par exemple de décider au runtime si un objet peut répondre à un message spécifique. La différence peut être illustrée comme suit :

1// Appel de fonction en C
2result = functionName(parameter);
3
4// Message passing en Objective-C
5result = [objectName methodName:parameter];

Cette distinction est fondamentale pour comprendre la dynamique d'Objective-C.

2.3. Gestion de la mémoire

Jusqu'à l'introduction de ARC (Automatic Reference Counting), la gestion de la mémoire en Objective-C reposait largement sur les développeurs. Ils devaient suivre un ensemble de conventions, utilisant des méthodes telles que retain, release, et autorelease pour gérer le cycle de vie des objets. Voici un exemple de gestion manuelle de la mémoire :

1NSObject *obj = [[NSObject alloc] init];
2[obj retain];
3[obj release];

Avec ARC, beaucoup de cette gestion manuelle a été automatisée, rendant la programmation en Objective-C moins sujette aux fuites de mémoire et aux erreurs de gestion de mémoire.

2.4. Extension avec les catégories

Les catégories en Objective-C permettent d'ajouter des méthodes à une classe existante sans avoir à créer une sous-classe. Cela est particulièrement utile pour ajouter des fonctionnalités à des classes pour lesquelles vous n'avez pas le code source, comme les classes de la bibliothèque standard d'Objective-C. Voici un exemple où nous ajoutons une méthode à la classe NSString :

1@interface NSString (MyCategory)
2- (BOOL)isPalindrome;
3@end

Avec cette extension, n'importe quelle instance de NSString peut maintenant appeler la méthode isPalindrome.

3. Impact sur le Développement iOS

3.1. Les frameworks fondamentaux basés sur Objective-C

Depuis ses débuts, iOS a été fortement ancré dans Objective-C. La plupart des frameworks et bibliothèques fondamentaux tels que UIKit, Core Data, et Foundation ont été écrits en Objective-C. Prenons l'exemple de UIKit, qui gère l'interface utilisateur d'une application iOS :

1#import <UIKit/UIKit.h>
2
3@interface AppDelegate : UIResponder <UIApplicationDelegate>
4@property (strong, nonatomic) UIWindow *window;
5@end

Ces frameworks ont façonné le développement iOS pendant des années et restent essentiels même à l'ère de Swift.

3.2. Transition vers Swift et compatibilité

Avec l'introduction de Swift en 2014, Apple a amorcé une transition vers ce nouveau langage, tout en assurant une compatibilité avec Objective-C. Grâce à un pont d'interopérabilité, les développeurs peuvent utiliser simultanément les deux langages dans un même projet. Cela permet, par exemple, d'appeler des méthodes Objective-C depuis Swift :

1let myObjcObject = MyObjectiveCClass()
2myObjcObject.someObjectiveCMethod()

Cependant, pour tirer le meilleur parti de Swift tout en travaillant avec du code Objective-C existant, il est crucial de comprendre les nuances et les meilleures pratiques d'interopérabilité.

3.3. Best practices d'Objective-C pour iOS

Même avec le passage progressif à Swift, il est essentiel pour les développeurs de connaître les meilleures pratiques d'Objective-C, notamment :

  • Gestion de la mémoire: Comme mentionné précédemment, bien que ARC ait automatisé une grande partie de la gestion de la mémoire, il est crucial de comprendre comment fonctionnait la gestion manuelle de la mémoire pour travailler avec du code plus ancien.
  • Nommage des méthodes: Objective-C favorise des noms de méthode descriptifs et verbeux pour une meilleure clarté.
  • Encapsulation: L'utilisation appropriée des propriétés et des méthodes, et la distinction entre les en-têtes publics et privés, sont essentielles pour assurer la modularité et la sécurité du code.
  • Utilisation des blocs: Les blocs en Objective-C, similaires aux closures en Swift, permettent d'encapsuler des morceaux de code qui peuvent être passés comme arguments ou stockés comme variables.
1void (^simpleBlock)(void) = ^{
2 NSLog(@"This is a block");
3};
4simpleBlock();

En comprenant et en appliquant ces meilleures pratiques, les développeurs peuvent garantir un développement iOS robuste et efficace, qu'ils travaillent entièrement en Objective-C ou en combinaison avec Swift.

4. L'Héritage et le Futur d'Objective-C

4.1. Sa place dans le monde post-Swift

Même avec l'avènement de Swift, Objective-C n'a pas été complètement éclipsé. Bien que Swift soit devenu le langage de choix pour les nouveaux projets iOS, Objective-C reste pertinent pour de nombreuses raisons. De nombreux grands projets, hérités d'une époque antérieure à Swift, sont toujours en production et nécessitent une maintenance continue. De plus, Objective-C conserve certains avantages en matière de performance et d'interopérabilité. Vous pouvez approfondir ces détails dans cet article du blog d'Apple.

4.2. Communauté et ressources disponibles

La communauté Objective-C, bien que moins dynamique qu'auparavant, reste solide. Il existe de nombreuses ressources disponibles pour ceux qui souhaitent apprendre ou approfondir leurs connaissances sur le langage, notamment :

  • NSHipster: un blog qui se concentre sur les subtilités d'Objective-C et Swift. Une mine d'or pour les développeurs de tous niveaux.
  • objc.io: Propose des livres, des vidéos et des articles sur des sujets avancés en Objective-C.
  • CocoaPods: un gestionnaire de dépendances pour Objective-C (et Swift) qui contient une riche bibliothèque de frameworks et bibliothèques pour iOS.

4.3. Projets notables utilisant encore Objective-C

Même à l'ère de Swift, de nombreux projets majeurs continuent d'utiliser Objective-C, soit parce qu'ils ont été initialement développés avec, soit parce qu'ils bénéficient de ses particularités. Parmi ces projets, on peut citer :

  • Facebook: Bien que Facebook ait adopté Swift pour de nombreux aspects de son application, de grandes parties de son codebase iOS reposent encore sur Objective-C.
  • Instagram: similaire à Facebook, Instagram maintient un équilibre entre Objective-C pour ses fonctionnalités héritées et Swift pour les nouvelles implémentations.
  • Realm: Une base de données orientée objet très populaire parmi les développeurs iOS, Realm est en grande partie écrit en Objective-C, bien qu'il offre des bindings pour Swift.

L'héritage d'Objective-C est profondément ancré dans l'écosystème iOS, et bien que le futur appartienne probablement à Swift, Objective-C continuera d'avoir une influence pendant encore de nombreuses années.

4.5 (30 notes)

Cet article vous a été utile ? Notez le