>> Technologie Électronique >  >> Téléphones portables et accessoires >> iPhone

Qu'est-ce qu'un « Delegate » (délégué) dans Xcode / Cocoa ?

Contexte : Développement iOS/macOS

Xcode = IDE Apple. Cocoa / Cocoa Touch = frameworks (API) pour apps Mac/iOS. Langages : Swift (moderne) et Objective-C (historique).

Définition du pattern Délégation (Delegation)

Un délégué (delegate) est un objet qui reçoit des messages d'un autre objet (l'« expéditeur » ou « delegating object ») quand des événements spécifiques surviennent. C'est un patron de conception (design pattern) fondamental en Cocoa.

Rôle et fonctionnement

  • L'objet expéditeur a une propriété weak var delegate: DelegateProtocol?
  • Il appelle des méthodes du delegate aux moments clés : delegate?.methodName(...)
  • Le delegate implémente le protocole (ensemble de méthodes optionnelles/obligatoires)
  • Ainsi, l'expéditeur délègue des décisions/comportements spécifiques au delegate

Pourquoi utiliser la délégation ?

  • Découplage : l'expéditeur ne connaît pas la classe concrète du delegate, seulement son protocole
  • Réutilisabilité : même classe expéditeur, delegates différents = comportements différents
  • Évite l'héritage excessif : préférer composition (has-a) à héritage (is-a)
  • Communication inversée : enfant → parent, vue → contrôleur, système → app

Exemples classiques Cocoa/UIKit

Bonnes pratiques Swift moderne

  • Protocole : protocol MonDelegate: AnyObject { func evenement(data: Type) } (AnyObject = référence faible possible)
  • Propriété : weak var delegate: MonDelegate? (évite cycles de rétention)
  • Appel : delegate?.evenement(data: valeur) (chaînage optionnel)
  • Implémentation : extension MonControleur: MonDelegate { ... }

En résumé : Le delegate permet à un objet générique de « poser des questions » ou « notifier » un objet spécifique qui connaît le contexte métier, sans créer de dépendance forte.

iPhone
ExpéditeurProtocole DelegateUsage typique
UITableViewUITableViewDelegateHauteur lignes, sélection, édition, swipe actions
UITableViewUITableViewDataSourceNombre sections/lignes, cellules, en-têtes (data source ≠ delegate mais même pattern)
UITextFieldUITextFieldDelegateDébut/fin édition, validation caractères, retour clavier
CLLocationManagerCLLocationManagerDelegateMise à jour position, erreurs, autorisations
URLSessionURLSessionDelegateRéponse, progression, authentification, cache