1. 类目 (Category):为已知的类添加方法
可以为已知的类添加方法,哪怕是你没有源码的类
通过类目添加方法会成为原始类的一部分
与原类中的方法同级
而且会被子类继承
类目的用处
1. 可以扩展别人的类,可以作为继承的替代方式。
2. 把代码放到多个文件中;便于多人协作。
注意:
不能在类目中添加 成员变量
可以为同一类添加多个类目,但类目名和方法名不能重复
不要随意重写类中的方法
*********************************************************************
2. 延展 (Extension) :是一种特殊形式的类目
编写在类的实现文件中
延展中定义的方法在类本身中实现(.m)
作用:定义私有方法
注意:
延展不写类目名时(即括号内不写),表示延展中定义的方法,必须实现。
如果提供了类目名称,则可以选择性实现
//····.m
@interface Test()
-(void) show;
@end
**************************************************************************
3. 协议 (Protocal):是一套标准(类似于接口、方法声明)
定义了应该实现什么,但不关心具体的怎么实现。
OC的协议是由@protocol声明的一组方法列表
要求其它的类去实现,相当于@interface部分的声明
@protocol 协议名称
@end
确认协议:
定义的协议必须要被某些类实现
类中需要实现协议中定义的方法
类中可实现多个协议
@interface 类名:⽗类名< 协议名称,协议名⼆...>
@end
特点:
1. 协议相当于确认类的父类
2. 可以规范类的行为
3. 利于系统设计
4. 利于团队开发等
5. 是可选语法,并不是一定要使用协议
注意:
确认协议时应实现协议中 @required 修饰的方法
可以选择性实现 @optional 修饰的方法
使用[对象 conformsToProtocol:@protocol (SalerProtocol)]判断是否遵循协议
协议的实现过程:定义协议------确认协议-------实现
******************************************************************************
协议应用—代理
代理模式:(有没有协议都是可以实现方法)
即本身不做实际的事情,而要求其他人去做
例如要卖房子,不是直接销售,而是让中介去帮自己销售
中介就是我们的代理
用assign修饰
@property(assign, nonatomic) id<protocol>delegate;