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)类目不能定义实例变量,而延展可以使用。
类目(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)类目不能定义实例变量,而延展可以使用。
相关文章推荐
- iOS多线程笔记
- iOS开发mac常用到的命令
- iOS --- OpenGLES之初步认识
- IOS 发布注意事项
- ios流继承关系
- ios查找分析友盟统计闪退日志,代码错误位置的方法闪退分析CrashAnalyze
- AVAudioPlayer音频播放器—IOS开发
- iOS常用的第三方框架
- 蜂窝教育iOS培训:让技术武装您 企业重用您
- IOS9.0后_视频
- IOS 终端命令
- IOS 终端命令2
- IOS 将项目上传到GitHub 上的方法步骤(任何项目)
- iOS - folder和group的区别,bundle文件夹(资源文件)得创建
- IOS - 字典和数组的copy使用
- iOS - performSelector方法的使用
- QUARTUSII 11.0 中的SOPC中如何更改NIOS II(如增加一个POI)
- [iOS]在tableview中用动画效果改变cell的高度
- IOS-TextField知多少
- iOS 9音频应用播放音频之控制播放速度