现在的位置: 首页 > 综合 > 正文

Objective C基础知识

2013年12月09日 ⁄ 综合 ⁄ 共 1144字 ⁄ 字号 评论关闭

在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

 



 

抱歉!评论已关闭.