2010-06-21 117 views

回答

56

Official Documentation

正式和非正式协议

有两种不同的协议, 正式和非正式:

  • 非正式协议是NSObject的一个类别,其中暗含 使得几乎所有的对象采用者 该协议。 (一个类别是一个 语言功能,使您可以将 添加到类中,而无需 对其进行子类化。)在非正式协议中实施 方法的可选项为 。在调用方法之前,调用对象检查 目标对象是否实现了 它。在Objective-C 2.0中引入可选协议方法 之前,非正式协议对于 基本和AppKit类 实施委派的方式至关重要。

  • A 正式协议声明客户端类别 预计将实施的方法列表。正式的 协议有自己的声明, 采用和类型检查语法。 您可以使用@required和@optional 关键字指定需要实现的方法或可选的 。子类继承其祖先采用的正式的 协议。 正式协议也可以采用其他协议。

正式协议是对Objective-C语言的扩展 。

+1

所以“非正式协议”只是另一个类别的名称? – Stas 2014-02-13 14:04:50

+6

与谷歌相比,苹果的文档可怕。 – 2014-07-02 08:19:51

+3

@JohnDoe vey非常认同,苹果文件是杀手锏。 – 2014-07-11 03:44:28

2

Objective-C语言提供了一种方法来正式声明方法列表(包括声明的属性) 作为协议。语言和运行时系统支持正式的协议。例如, 编译器可以根据协议检查类型,并且对象可以在运行时反省以报告是否它们符合协议 。

11

非正式协议Category(实现可以可选)

正式协议Extension(实现是可选的,必需的)

+0

类别方法的实现是否可选?我不这么认为,因为我评论了一个方法实现,并立即发现错误“方法定义为'xxxmethod'丢失”。 xxx方法在.h文件中声明。 – selva 2016-09-30 21:09:54

+1

描述差异的最简单方法。 – Warewolf 2017-11-13 09:26:32

相关问题