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
| Expéditeur | Protocole Delegate | Usage typique |
|---|---|---|
UITableView | UITableViewDelegate | Hauteur lignes, sélection, édition, swipe actions |
UITableView | UITableViewDataSource | Nombre sections/lignes, cellules, en-têtes (data source ≠ delegate mais même pattern) |
UITextField | UITextFieldDelegate | Début/fin édition, validation caractères, retour clavier |
CLLocationManager | CLLocationManagerDelegate | Mise à jour position, erreurs, autorisations |
URLSession | URLSessionDelegate | Réponse, progression, authentification, cache |
