码迷,mamicode.com
首页 > 其他好文 > 详细

Objectiv-C 类的扩展

时间:2015-12-25 22:17:26      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

在oc中要为类扩充功能有如下几种方式:

1.子类化:通过继承类并添加方法实现功能扩充(该方式可以扩充方法,也可以扩充实例变量)

2.直接在该类中修改源代码

3.Category

category叫分类,类目

是为没有源代码的类扩充功能,扩充的功能会成为原有类的一部分,可以通过原有类或者原有类的对象直接调用,并且可继承

该方式只能扩充方法,不能扩充实例变量

(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方法判断能否响应选定的方法)

 

Objectiv-C 类的扩展

标签:

原文地址:http://www.cnblogs.com/smithjackyson/p/5076966.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!