我想知道是否有人可以解释什么是 Objective C 中的非正式协议(protocol)?我尝试在苹果文档和其他一些书籍上理解它,但我的头脑仍然在旋转,所以如果有人可以举例说明,我将非常感激。
谢谢。
最佳答案
非正式协议(protocol),正如 Jonnathan 所说,通常是在 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
方法的 @protocol
。
在任何情况下,非正式协议(protocol)都是方法声明的集合,您可以选择实现这些方法来改变行为。通常,但不总是,方法实现是在委托(delegate)的上下文中提供的(例如,表格 View 的数据源必须实现少数必需的方法,并且可以选择实现一些额外的方法)。
关于objective-c - Objective-C 中的非正式协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2010058/