在OC中不可以实现多重继承,因为是实现多重继承代价太大,但OC可以实现多个协议,协议类似于C++中的纯虚类,只有方法定义,没有方法实现,只有.m文件,没有成员变量。
在OC中有个分类的功能,C++中没有,分类可以很好地在类中添加新的方法,而不是用继承来实现。
分类的固定框架:
类名+增加函数名.m,与类实现函数放在同一个目录下面,在分类函数中@interface 类名(新增函数名)
OC中分类是如何实现的?
分类的使用是通过Objective-C的动态绑定实现,通过分类能够实现比继承更好的效果,通过category不能添加新的实例变量
OC 中的动态类型检查和静态类型检查
静态类型检查是指在程序编译期间,编译器会会检查该类型是否有对应的方法。
动态类型检查是指指使用好几种不同的方式指向同一个类型。
sample:
NSArray *array=[NSMutableArrayarray];
[array addObject:@"hello"];
上面这段代码在运行时是正常的,但在编译期间会有warning,因为NSArray没有addObject函数
NSMutableArray *mutableArray=[NSMutableArrayarray];
NSArray *array=[NSArrayarray];
mutableArray=array;
[mutableArray addObject:@"hello"];
上面这段代码编译会有warning, 但在执行时出错
在XCode中可以设置xcode ,将警告当做错误对待
NSArray *colors=[NSArrayarrayWithObjects:@"hello",@"richard",@"yang",nil];
NSLog(@"retaincount is %ld",[colorsretainCount]);
self.name=colors;
NSLog(@"retaincount is %ld",[colorsretainCount]);
NSArray *col=[[NSArrayalloc]
initWithObjects:@"DFAS",nil];
self.name=col;
NSLog(@"retaincount is %ld",[colorsretainCount]);
输出结果:
2013-08-22 18:33:45.746 OCtest[1160:303] retaincount is 1
2013-08-22 18:33:45.748 OCtest[1160:303] retaincount is 2
2013-08-22 18:33:45.748 OCtest[1160:303] retaincount is 1