objective-c - Objective-C 中的非正式协议(protocol)?

标签 objective-c

我想知道是否有人可以解释什么是 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/

相关文章:

ios - UILabel 在自定义 UItableviewcell 中显示(null)

ios - 每个 UI 元素都应该有一个 IBOutlet 吗?

ios - 如何给出特定的手势识别器

ios - 创建自定义 Collection View 布局

objective-c - 我需要在iPad上播放没有声音的视频

ios - IOS/Objective-C:360图像旋转问题

ios - 在显示层之前应用 CGAffineTransform

ios - 自动调整大小不以编程方式工作

iphone - NSFetchedResultsController 和关系

objective-c - CFURLRef 需要桥接转换错误