正如Jonnathan所说,An informal protocol通常是在NSObject上声明的一个类别,没有相应的实现(大多数情况下——很少有一个在NSObject上提供虚拟实现).
从10.6开始(在iPhone SDK中),这种模式不再使用.具体而言,10.5(及之前版本)中声明如下:
@interface NSObject(NSApplicationNotifications)
- (void)applicationWillFinishLaunching:(NSNotification *)notification;
...
@interface NSObject(NSApplicationDelegate)
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender;
...
现宣布为:
@protocol NSApplicationDelegate <NSObject>
@optional
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender;
...
- (void)applicationWillFinishLaunching:(NSNotification *)notification;
...
也就是说,非正式协议现在被声明为@protocol
个,有@optional
个方法.
在任何情况下,非正式协议都是一组方法声明,您可以通过这些声明 Select 性地实现改变行为的方法.通常,但并非总是,方法实现是在委托上下文中提供的(例如,表视图的数据源必须实现一些必需的方法,并且可以 Select 实现一些附加方法).