我想知道是否有人能解释什么是目标C中的非正式协议?我试图在苹果文档和其他一些书中理解它,但我的头脑仍然在旋转,所以如果有人能举例说明,我将非常感激.

谢谢

推荐答案

正如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 实现一些附加方法).

Objective-c相关问答推荐

获取 Objective-C 类或实例的所有方法

在 UITableViewCells 上显示复制弹出窗口的简单方法,如地址簿应用程序

如何在目标 C 中创建单例类

在 NSData 和 base64 字符串之间转换

如何连续关闭 2 个模态视图控制器?

启动 Finder 窗口并 Select 特定文件

适用于 ios 的 360° 全景库

UITextField 中的文本在编辑后向上移动(编辑时居中)

使用 UIView animateWithDuration 进行动画处理时无法 UIButton

如何获得本地化的 Cancel、Done 等?

以编程方式创建 UITableView

未找到 RKObjectMapping.h

Objective-C - 何时使用touch

了解 performSegueWithIdentifier

动画 UIButton 状态变化

如何将小时数添加到 NSDate?

UIDatePicker 中的最小和最大日期

使用 UINavigationController 在 UIPageViewController 中下推内容

有没有办法在不使用 UINavigationController 的情况下更改 Storyboard 中 UINavigationBar 的高度?

如何在 Xcode 7 中启用_BITCODE?