objective-c 动态数据类型

2018-04-10  本文已影响0人  一世长安乱

静态数据类型

特点:

动态数据类型

id是一个动态数据类型##

作用:

//Person是Student的父类
//Person有eat的方法,Student有study的方法
Person *p = [Person new];
[p eat];    //
[p study];  //报错
Student * s = [Student new];
[s eat];    //报错
[s study];  //
Person *per = [Student new];//多态
//per实际上分配的是Student类的空间,但是不能调用Student的方法
[per eat];      //
[per study];    //报错

id obj = [Person new];
[obj eat];      //
[obj study];    //
id obj1 = [Student new];
[obj1 eat];     //
[obj1 study];   //
弊端:由于动态数据类型可以调用任一方法,所以有可能调用到不属于自己的方法,又不会报错,会导致运行时的错误
应用场景:多态,可以减少代码量,避免调用到子类特有的方法需要强制类型转换
为了避免动态数据类型引发的运行时的错误,一般情况下如果使用动态数据类型定义一个变量,在调用这个变量的方法之前会进行以此判断,判断当前变量是否能够调用这个方法
if([obj isKindOfClass:[Student class]])
{
//isKindOfClass,判断指定对象是否是一个类,或者是某一个类的子类
    [obj studyt];
}
if([obj isMemberOfClass:[Student class]])
{   
//判断是否为子类
    [obj student];
}
上一篇 下一篇

猜你喜欢

热点阅读