Un site protocole informel était, comme l'a dit Jonnathan, typiquement une catégorie déclarée sur NSObject sans implémentation correspondante (le plus souvent - il y en avait une rare qui fournissait des implémentations factices sur NSObject).
Depuis la version 10.6 (et dans le SDK de l'iPhone), ce motif n'est plus utilisé. Plus précisément, ce qui était déclaré comme suit en 10.5 (et avant) :
@interface NSObject(NSApplicationNotifications)
- (void)applicationWillFinishLaunching:(NSNotification *)notification;
...
@interface NSObject(NSApplicationDelegate)
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender;
...
Est maintenant déclaré comme :
@protocol NSApplicationDelegate <NSObject>
@optional
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender;
...
- (void)applicationWillFinishLaunching:(NSNotification *)notification;
...
En d'autres termes, les protocoles informels sont désormais déclarés comme @protocol
avec un groupe de @optional
méthodes.
Quoi qu'il en soit, un protocole informel est un ensemble de déclarations de méthodes dont vous pouvez éventuellement implémenter les méthodes pour modifier le comportement. Généralement, mais pas toujours, les implémentations de méthodes sont fournies dans le contexte de la délégation (la source de données d'une vue de table doit implémenter une poignée de méthodes requises et peut éventuellement implémenter quelques méthodes supplémentaires, par exemple).