一、Category
1、Category:也叫分类,类目。是为没有源代码的类扩充功能。扩充的功能会成为原有类的一部分,可以通过原有类或者原有的对象直接调用,并且可继承。
2、注意:
1)该方式只能扩充方法,不能扩充实例变量,@property(可能编译不报错,但是运行有问题)。
2)分类可以访问原来类中的成员。
3)如果分类和原来类出现同名的方法,优先调用分类中的方法,原来类中的方法会被忽略。
4)多个类目中有同名的方法的时候执行的是最后编译的那个类目的同名方法。
二、Extension
1、为能够获得源代码的类添加私有的实例变量和方法。
2、注意:延展操作的类必须是能够获得源代码的类(具有.m文件的类)。
3、Category和Extension的区别
1)作用不同:Category是扩展类的功能的,Extension是用来给类声明私有方法和实例变量的
2)Category存放在一堆.h .m文件中,Extension存放在.m文件中
3)Extension可以添加实例变量,Category不可以
三、delegate设计模式
1、delegate设计模式的使用我们首先需要明白三个要素-委托方,代理方,协议。
1)委托方:委托别人去执行某些操作的人(对象)。
2)协议(Protocol):委托方需要代理方执行的操作。
3)代理方:被委托去执行某些操作的人(对象)。
2、协议是一套标准(一堆方法的声明),只有.h文件。协议的定义以@protocol开始,以@end结束。比如:声明一个结婚协议。
@protocol MarryProtocol <NSObject>
@required
- (void)makeMoney; // 赚钱
@optional
- (void)cooking; // 做饭
@end
3、
1)步骤1:委托方制定一套协议(在委托方的.h文件中),协议中声明委托方需要让代理方执行的方法(只有方法声明)。
2)步骤2:委托方声明一个delegate属性(assign修饰),存储代理方对象。
3)步骤3:代理方需要遵守协议,并且对协议中的方法进行实现。
4)步骤4:将代理方设置为委托方的代理人(将代理方对象赋值给委托方对象的delegate属性,进行存储)。
5)步骤5:委托方在合适的时机通知代理方对象去执行相应的操作。
注:respondsToSelector:该方法判断对象是否能够对某一个选定的方法做出响应。