@protocol是我们协议的标识,协议中的方法有两种,一种是必须实现的,另一种是可选择实现的。这是一种间接扩充功能的方式,协议中只有一堆方法的声明,只有.h文件。协议的定义以@protocol开始,以@end结束。使用时需要类服从协议,实现协议中的方法来扩充功能,而且只能扩充方法,不能扩充实例变量。局限于必须要拥有该类的源代码。
@protocolSayHello
//必须实现的方法,默认方法就是必须实现的
@required
-(void)sayHello;
//可选择实现的方法
@optional
-(void)sayByeBye;
Category:作用:
•1;Category:也叫分类,类目。是为没有源代码的类扩充功能。
•2;扩充的功能会成为原有类的一部分,可以通过原有类或者原有类的对象直接调用,并且可继承。
•3;该方式只能扩充方法,不能扩充实例变量。
Category的使用:
•1;使用类目添加的方法首先需要在对应的类中导入类目的.h文件
•2;添加的方法是通过类目为源代码的类(eg:NSString)添加的一个类方法,因此该方法的调用需要原有类名调用。
Extension:
使用场景:为能够获得源代码的类添加私有的实例变量和方法
•注意:延展操作的类必须是能够获得源代码的类(具有.m文件的类)
语法格式:1;Extension的语法格式和Category很相似,相当于把Category的.h文件挪到了原始类的.m文件中。2;使用延展为一个类添加一个私有的方法,同时添加私有的实例变量存储对应的信息。
Extension的使用:通过延展定义的方法属于私有方法,外界没有访问权限,只能在当前类的.m文件中访问。
Category和Extension的区别:作用上:Category:为没有源代码的类添加方法。Extension:管理类私有方法。格式上:Category;定义一对.h和.m。Extension;把代码写到原始类的.m中。
delegate:代理,主要任务是帮忙完成一些我们不想做的事情。
使用场景:当一些任务不想去实现,想让别人去实现,就可指定一个代理,去帮助完成,只需通知代理何时去做这些事情即可。
delegate设计模式的使用我们首先需要明白三个要素:委托方(委托别人去执行某些操作的人/对象),代理方(被委托去执行某些操作的人/对象),协议(Protocol:委托方需要代理方执行的操作)。