睡前又把基础知识点重新学习了一遍
类别:category
协议:protocol
代理:delegate
1、类别
类别(Category)是oc中的一个新的语法特性。
有两种用途:①、在原有类的基础上添加新的方法;②、将相同的方法归类,使用更方便;
解释①:在不创建继承类的情况下,实现对已有类的扩展;
例如:给NSString扩展一个字符串反转的方法,不需要重新创建子类,直接使用类别扩展反转方法。
注意:类别和子类的区别,类别不能新增实例变量,而子类可以继承父类的实例变量,也可以新增实例变量。
子类和类别如何抉择:没有界限分明的情况下,如果需要新增实例变量,那么就使用子类;否则就使用类别。
解释②:在一个大型类中,可以用类别将众多的方法分组,方便阅读,也方便多人协作共同开发,避免冲突。
2、协议:
协议(Protocol)是OC中的一种概念,协议与类的.h类似,协议中只定义了方法的声明,但是没有实现,也即是只有.h文件
例如下面就是一个完整的协议:
如果某各类遵守了这个USB协议,那么就必须实现其中必须要(Required)实现的方法,其他类型方法可选择实现。
3、代理:
代理(Delegate)主要是用来实现消息传递的,是一种设计模式;
代理常用来实现代理设计模式,协议经常用来实现委托对象,一个委托对象是一种用来协同或者代表其他对象的特殊对象。
代理与协议的结合使用,主要看下面红色部分:
为当前类声明一个id类型的delegate,这个delegate遵守<ClickConnectionDelegate>协议,需要传值时,就判断这个delegate是否响应协议中的方法,如果未响应,直接return;如果响应了协议中的方法,那么这个代理就执行这个方法,协议方法有两种情况:①、回传值;②、回传事件。