Objectiv-C 类的扩展
在oc中要为类扩充功能有如下几种方式:
1.子类化:通过继承类并添加方法实现功能扩充(该方式可以扩充方法,也可以扩充实例变量)
2.直接在该类中修改源代码
3.Category
category叫分类,类目
是为没有源代码的类扩充功能,扩充的功能会成为原有类的一部分,可以通过原有类或者原有类的对象直接调用,并且可继承
该方式只能扩充方法,不能扩充实例变量(使用category还可以重写类的方法)
创建类目扩充NSString类:创建文件NSString+AddMethod.h和NSString+ADDMethod.m
(1)在类目的.h文件中声明需要添加的方法
@interface NSString (AddMethod)
//声明sayHi方法
+ (void)sayHi;
@end
在类目的.m文件中实现对应的方法
@implementation NSString (AddMethod)
//实现sayHi方法
+ (void)sayHi
{
NSLog(@"Hello");
}
@end
4.Extension
extension叫延展
为能够获得源代码的类添加私有的实例变量和方法
使用方法:相当于把category的.h文件挪到原始类的.m文件中
例子:
使用延展为Teacher类添加一个私有的方法(领工资的方法),同时添加私有的实例变量(_salary)存储对应的薪资
代码如下:
Teacher类中.m文件中的代码
@interface Teacher()
{
NSInteger _salary;
}
- (NSInteger)getSalary;
@end
@implementation Teacher
- (NSInteger)getSalary
{
NSLog(@"这个月发了不少,可以吃大餐了");
_salary = 10000;
return _salary;
}
@end
5.协议(类服从协议,实现协议中的方法来扩充功能,但只能扩充方法,不能扩充实例变量,必须要拥有该类的源代码)
Delegate叫代理
delegate设计模式有三个要素:委托方,代理方,协议
协议是一套标准(方法的声明),只有.h文件
注意:协议的方法默认是必须实现的,即@required修饰的方法。关键字@optional修饰的方法是可选的,可实现也可不实现
实现步骤:
1.委托方制定一套协议(在委托方的.h文件中)
2.委托方声明一个delegate属性(assign修饰),存储代理方对象:@property(nonatomic,assign) id<协议名> delegater;
3.代理方需要遵守协议,对协议中的方法进行实现
4.将代理方设置为委托方的代理人
5.委托方在合适的时机通知代理方对象去执行相应的操作(代理方对象调用respondsToSelector方法判断能否响应选定的方法)
转载请注明:作者SmithJackyson