一、概念:
1、非正式协议(informal protocol):所谓的非正式协就是类别,即凡是NSObject或子类的类别,都是非正式协议。
2、正式协议(protocal):指的是一个以@protocol方式命名的方法列表,与非正式协议不同的是,它要求显示的采用协议。你可以使用@required或者optional关键字指定方法是否必须实现。子类继承父类采用的协议。正式协议也可以遵守其他协议。
正式协议(protocal):
1、正式协议的方法类型
正式协议声明的方法有两种类型:
① @required
该类的方法要遵守相应协议的类中是必须实现的,不然编译器会警告(这是在编译时做的检查)
② @optional
该类的方法在遵守相关协议的类中是否实现是可选的。
2、正式协议存在的意义
正式协议可以将业务的方法定义剥离出来,形成了一个单独的文件。
非正式协议(informal protocol):
1、类别和匿名类别(类扩展)
所谓的类扩展,就是为一个类添加额外的原来没有的变量、方法或者合成属性。
2、类别和类扩展的区别:
1、类别中只能增加方法;
2、类扩展不仅能增加方法,还可以增加实例变量(或者合成属性),只是该实例变量默认是@private类型的(作用范围只能再自身类,而不是子类或者其他地方);
3、类扩展中声明的方法没有被实现,编译器会报警,但是类别中的方法没有被实现编译器是不会有任何警告的。这是类扩展在编译阶段呗添加到类中,而类别是在运行时被添加到类中。
4、类扩展不能像类别那样拥有独立的实现部分,也就是说,类扩展所声明的方法必须依托对应类的实现部分来实现。