您的位置:首页 > 移动开发 > IOS开发

IOS学习笔记之类目和延展

2015-12-30 08:45 615 查看
1、类目的概念

类目(Category),也叫类别、分类。

在开发过程中,有时候需要为已有的类扩展一些新的行为方法,但是却不想用到继承,这时候就会用到类目。

类目可以为一个现有的类扩展新的方法,扩展的方法会成为原始类的一部分。

通过类目扩展的方法,子类也可以继承下来。

2、定义类目

定义类别的语法与定义类的语法存在差异:

(1)定义类时使用的类名必须是该项目中没有的类,而定义类别时使用的类名必须是已有的类。

(2)定义类别时必须使用圆括号来包含类别名。

(3)类别中只能定义方法。

类目的定义和类的定义很相似,在.h文件里声明,在.m文件里实现方法。

例如:为NSArray扩展一个新的方法:

@interface NSArray (ChineseLog)

-(NSString *)printChinese;

@end

@implementation NSArray (ChineseLog)

-(NSString *)printChinese{

NSString *str = [NSString
stringWithFormat:@"(\n\"%@\"\n)",[self
componentsJoinedByString:@"\",\n\""]];

return str;

}
调用该方法:

NSArray *array =
@[@"张三",@"李四",@"王五"];

NSLog(@"%@",[array
printChinese]);



3、类目的局限性:

(1)无法向类目中添加新的实例变量

(2)如果类目中覆盖现有类的方法,会导致原始方法无法调用。因为类目中的方法具有更高的优先级,所以一般不要覆盖现有类中的方法。

4、类目的使用

(1)当某个类非常强大时,如果将该类的实现代码放在一个文件夹中,将会导致这个文件非常强大,以至于维护起来非常困难。如果需要将一个较大的类分模块设计,使用类目是一个不错的选择。

(2)没有在接口部分定义而是在实现部分定义的方法相当于私有方法,不可供外部访问。但是OC中实际上并没有真正的私有方法,因为可以通过类目来定义方法,从而实现"私有方法"的调用。

5、延展的概念

延展(extension),与类目很相似,延展相当于就是匿名的类目。

延展中声明的方法在类本身狗的@implementation和它对应的@end之间实现。

6、延展的定义

@interface 已有类()

{

实例变量

}

//方法定义

@end

.m文件修改import头文件

7、延展的使用

@interface Computer :
NSObject

@property (nonatomic)
NSString *cpu;

@property (nonatomic)
NSString *hardDisk;

@property (nonatomic)
NSString *motherboard;

-(void)assemble;

@end

#import "Computer.h"

#pragma mark 生产CPU

@interface Computer()

-(void)produceCpu;

@end

#pragma mark 生产硬盘

@interface Computer()

-(void)produceHardDisk;

@end

#pragma mark 生产主板

@interface Computer()

-(void)produceMotherboard;

@end

#pragma mark 实现

@implementation Computer

-(void)assemble{

[self
produceCpu];

[self
produceHardDisk];

[self
produceMotherboard];

NSLog(@"电脑cpu为:%@,硬盘为:%@,主板为:%@",_cpu,_hardDisk,_motherboard);

}

-(void)produceCpu{

_cpu =
@"2 GHz Intel Core i7";

}

-(void)produceHardDisk{

_hardDisk =
@"Macintosh HD";

}

-(void)produceMotherboard{

_motherboard =
@"MacBook Air";

}

@end

//使用延展组装电脑,cpu,硬盘、主板三个属性,有一个组装的方法

Computer *computer = [[Computer
alloc] init];

[computer assemble];



8、类目和延展的区别

(1)类目通常有单独的.h文佳.m文件,而延展不需要。延展用于临时对某个类的.h文件进行扩展。

(2)类目不能定义实例变量,而延展可以使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: