Objective-C中的非正式协议
非正式协议使用关键字@interface,其中的方法可以不去进行实现,虽然编译器会给出警告,但是还是会编译成功。
Objectivie-C中的正式协议
正式协议使用关键字@protocal.
正式协议(@protocal)可以将业务中的方法定义剥离出来,形成一个单独的文件。如果遇到两个系统需要交换数据,可以制定一套双方都遵守的protocal,然后这两个系统中都把这个协议文件添加到项目中,实现它即可。这个功能非正式协议做不到。(不信大家可以把NSObject<IQuery>中的IQuery改成其它类的interface 定义名称试试,编译根本通不过)。
在Objective-C2.0中对正式协议还做了一些扩展,允许把协议中的方法标识为“必须实现的(@requied)”和“可选实现(@optional)”两类,如果协议中的方法被标识@optional,即使采用协议的类不实现这些方法,编译器也不会给出警告,这赋予了正式协议的更多灵活性。