Category
类目、分类
可以为任何类添加方法。
类目的接口部分:声明添加的方法。
不能添加实例变量。
类目包含两部分:接口部分、实现部分。
类目中添加的方法属于类的一部分。
子类可以继承父类所有的方法,包含类目中的方法。
类目中方法的优先级高于类中定义的方法(类目中的方法与类中的方法重名)。
Extension
延展
类的延展写在类的实现文件中(.m)。
延展是给有源代码(有.m文件)的类使用的。
延展只有接口部分,没有实现部分。
延展是用于管理实例变量和"私有"方法的。
在延展中声明的方法,在类的实现部分进行实现。
在延展中声明的实例变量和方法,在类的内部需要使用,但是不想对外公开。
仅类的内部使用,不提供给类的外部使用。
声明私有方法时,可以使用前缀,如:- (void)p_test;
延展在.m文件中的声明标志:
@interface Person ()
@end
Procotol
协议
协议和对象本身没有任何关系。
当对象需要得到某个协议中的方法时,遵守协议即可得到。
协议中只有方法的声明,由遵守协议的对象在其实现文件中实现。
一个协议可以被多个类遵守。
一个类可以遵守多个协议。
协议中的方法种类:
@required 默认的是必须实现的
即遵守本协议的对象,必须实现的方法。
@optional 可选实现
创建协议:
创建一个RentProtocol
@protocol RentProtocol <NSObject>
@end
遵守协议的对象:
可遵守多个协议,协议之间用逗号间隔。
@interface Student : NSObject<RentProtocol,Employment> //遵守协议
@end
Delegate
代理
代理的实现步骤:
1、代理设计模式的两方:找代理的对象,做代理的对象。
2、找代理的对象根据需求定义协议。
3、在找代理的对象中,声明操作代理的实例变量 _delegate。
4、在找代理的对象中,实现设置代理对象的方法。
5、在找代理的对象中,根据需求使用代理对象调用协议中的某个方法。
6、做代理的对象,遵守相应的协议
7、做代理的对象,实现协议中的方法
8、创建找代理的对象、做代理的对象
9、调用方法完成设置代理对象
一个对象的代理对象可以是任意类型的。
一个对象的代理对象,不可能同时存在多个。可以换代理对象。
协议方法和代理方法是同一个方法。