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,assignid<协议名> delegater;

3.代理方需要遵守协议,对协议中的方法进行实现

4.将代理方设置为委托方的代理人

5.委托方在合适的时机通知代理方对象去执行相应的操作(代理方对象调用respondsToSelector方法判断能否响应选定的方法)

 

 


转载请注明:作者SmithJackyson

posted @ 2015-12-25 20:54  SmithJackyson  阅读(403)  评论(0编辑  收藏  举报