一. Category(类目)
优点:为没有源码的类(系统类)扩充功能,通过原有类(+方法)或者原有类的对象(-方法)直接调用,并且可以继承.
注:该方法只能扩充方法,不能扩充实例变量.
新建文件使用 Objective - C File,File type 改为 category,下写要扩展的类名字.
则创建完后会在工程包内生成一对.h与.m文件.在.h文件中声明需要添加的方法
@interface NSMutableArray (Additions)
+ (void)sayHi;
- (void)sayHi;
@end
在.m文件中对方法进行实现:
@implementation NSMutableArray (Additions)
+ (void)sayHi {
NSLog("Hello,world!");
}
- (void)sayHi {
NSLog("Hello,world!");
}
@end
类目的使用,即在main.m文件中引入类目文件,即可在无源码类实现+,-方法.
二. Extension(延展)
类外部不能直接访问,甚至子类也不能直接访问的私有实例变量以及方法.将此段代码写入到类的.m文件中隐藏.
目的:为了能或得源代码类添加私有的实例变量和方法.
能做Extension的类必须是能够或得源代码的类.
Extension的语法与Category的语法类似,相当于将Category的语法挪到了.m文件中.
在该类的.h中声明的实例方法,才可以对其私有的实例变量以及私有方法进行操作.
私有的方法定义同样是在类的.m文件的@implementation下进行定义的.
三. 总结
类功能的扩充:
继承 Inheritance
协议 Protocol
类目 Category 为不能提供源码的类扩充方法
延展 Extension 类有源码,添加私有的实例变量与方法.
四. Delegate(代理设计模式)
优点: 将固定的方法交给指定的对象来完成.为代理设计模式.
在需要代理的类中声明协议,在.h文件中属性声明特有的协议,注意此处属性的特性用assign,代理对象通过实现协议中定义的方法,最有由雇主对象调用delegate有代理对象完成操作.