四十一、类别 和 协议(五)非正式协议

来源:互联网 发布:vb编程题及答案 编辑:程序博客网 时间:2024/06/06 03:57

也许  你  从各种渠道  听说过  非正式协议这个概念。非正式协议  实际上  指的是  一个类别。这个类别当中  列举了  一系列的措施,而  这些措施  并没有包含  具体内容。大家  都  知道  所有类型的物件  都  包含  在最底层那类物件当中,所以  非正式协议  是  为最底层那类物件制定的,这样  所有类型的物件  都可以遵循。因此  非正式协议 又称为  抽象协议。

如果  你  查看  <NSScriptWhoseTests.h>这个头文件,你  就能找到  这样的非正式协议:

这里的NSComparisonMethods这个类别  就属于  NSObject这类物件。这里面的措施  可以当作  协议的一部分  加以实施。一类物件的非正式协议  并不包含  每项措施的具体内容,而  包含在这类物件中的另外一类物件  则需要  在它们的接口部分  列举出  这些措施,并且  在实施部分  写出  这些措施的具体内容。与  正式协议  不同,编译器 并不强制要求  你  实施  非正式协议中的措施。

如果  一类物件  遵循  一项正式协议,那么  这项协议中所有必要的措施  都必须  适用于  这类物件。如果  一类物件  遵循  一项非正式协议,这项协议中的措施  并不一定要  全部  适用于  这类物件。编译器  也不会检查  一类物件  是否遵循  非正式协议,但是  运行系统  会检查  这一点。

先前的博文中提到的@optional命令  和  非正式协议的作用  是  一样的。