Objective-C中正式和非正式协议之间有什么区别?
答案 0 :(得分:58)
正式和非正式协议
协议有两种, 正式和非正式:
非正式协议是NSObject上的一个类别,它是隐含的 使几乎所有的对象都采用了 协议。 (一个类别是 语言功能,使您能够 在没有的情况下向类添加方法 继承它。)的实现 非正式协议中的方法是 可选的。在调用方法之前, 调用对象检查以查看 目标对象是否实现 它。直到可选的协议方法 在Objective-C 2.0中引入, 非正式协议至关重要 Foundation和AppKit类的方式 实施代表团。
正式协议声明客户端类的方法列表 预计将实施。正式 协议有自己的声明, 采用和类型检查语法。 您可以指定其方法 实施是必需的或可选的 与@required和@optional 关键字。子类继承正式 他们的祖先采用的协议。 正式协议也可以采用其他协议 协议
正式协议是对...的扩展 Objective-C语言。
答案 1 :(得分:15)
非正式协议:Category
(实施是可选的)
正式协议:Extension
(实施是可选的和必需的)
答案 2 :(得分:2)
Objective-C语言提供了一种正式声明方法列表(包括声明的属性)的方法 作为协议。语言和运行时系统支持正式协议。例如, 编译器可以根据协议检查类型,对象可以在运行时内省来报告是否 或不符合协议。