Objective-C中正式和非正式协议之间有什么区别?

时间:2010-06-21 05:49:10

标签: iphone objective-c cocoa cocoa-touch macos

Objective-C中正式和非正式协议之间有什么区别?

3 个答案:

答案 0 :(得分:58)

来自Official Documentation

  

正式和非正式协议

     

协议有两种,   正式和非正式:

     
      
  • 非正式协议是NSObject上的一个类别,它是隐含的   使几乎所有的对象都采用了   协议。 (一个类别是   语言功能,使您能够   在没有的情况下向类添加方法   继承它。)的实现   非正式协议中的方法是   可选的。在调用方法之前,   调用对象检查以查看   目标对象是否实现   它。直到可选的协议方法   在Objective-C 2.0中引入,   非正式协议至关重要   Foundation和AppKit类的方式   实施代表团。

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

  •   
     

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

答案 1 :(得分:15)

非正式协议Category(实施是可选的)

正式协议Extension(实施是可选的和必需的)

答案 2 :(得分:2)

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