Objective-C中正式和非正式协议有什么区别?
Objective-C中正式和非正式协议有什么区别?
从正式文件
正式和非正式协议
有两种协议,正式和非正式的:
一个非正式的协议是一个关于NSObject的类别,它隐式地使得几乎所有对象都成为协议的采用者。 (一个类别是一种语言function,使您可以将方法添加到某个类中,而无需对其进行子类化。)在非正式协议中实现方法是可选的。 在调用方法之前,调用对象检查目标对象是否实现它。 在Objective-C 2.0中引入了可选协议方法之前,非正式协议对于Foundation和AppKit类实现委派的方式至关重要。
一个正式的协议声明了一个客户类需要实现的方法列表。 正式协议有自己的声明,采用和types检查语法。 您可以使用@required和@optional关键字指定需要实现的方法或可选方法。 子类inheritance了其祖先采用的正式协议。 正式协议也可以采用其他协议。
正式的协议是对Objective-C语言的扩展。
非正式协议 : Category
(实施是可选的)
正式协议 : Extension
(实现是可选的并且是必需的)
Objective-C语言提供了一种方法来正式声明方法列表(包括声明的属性)作为协议。 语言和运行时系统支持正式的协议。 例如,编译器可以根据协议检查types,并且对象可以在运行时检查它们是否符合协议。