静态类型
在编译的时候就知道是变量的类型,知道有哪些方法和属性,
如果访问了不属于静态数据对应的属性和方法,那么编译器就会报错
动态数据类型
特点:在编译的时候编译器不知道变量的真实类型,只有在运行的时候才知道它的真实类型,
如果访问了不属于动态李书记类型的属性和方法,编译器不会报错,运行时才会报错
应用场景:
多态,减少代码量
避免调用子类特有方法强制类型转换
//问题1:数据类型可以做哪些事情?
答:
变量
返回值
参数
既然是数据类型, 所以就可以用来
定义变量
作为函数的参数
作为函数的返回值
//问题2:动态类型和静态类型的区别?
答:
静态类型:编译时会检查该类型是否有这个方法和等号两边的格式是否相同或包含
默认情况下所有的数据类型都是静态数据类型
1.静态数据类型的特点:
在编译时就知道变量的类型,知道变量中有哪些属性和方法
在编译的时候就可以访问这些属性和方法,并且如果是通过静态数据类型定义变量, 如果访问了不属于静态数据类型的属性和方法, 那么编译器就会报错
2.动态数据类型的特点:
在编译的时候编译器并不知道变量的真实类型, 只有在运行的时候才知道它的真实类型
并且如果通过动态数据类型定义变量, 访问了不属于动态数据类型的属性和方法, 编译器不会报错
//问题3:id和NSObject * 的区别?
答:
id 是动态类型
NSObeject * 是静态类型
NSObject *是一个静态数据类型 id 是一个动态数据类型
//问题4:动态数据类型的应用场景?
答:
多态 父类子针指向子类
省去父类强转子类的代码
//问题5:动态数据类型的弊端是什么?
答:
动态数据类型在编译的时候,编译器不能判断它的所有的方法和属性,在运行时会报错,在程序设计的时候最好让代码在编译环境下报错而不是运行时。因为运行时错误比较那已查找和解决。
动态类型主要用在多态, 可以减少代码量, 避免调用子类特有的方法前,需要强制类型转换
//问题6:判断数据类型的有哪些方法?(变量 修改为 对象)
答:
iskindofclass
ismemberofclass
为了避免动态数据类型引发的运行时的错误, 一般情况下如果使用动态数据类型保存一个对象, 在调用这个对象的方法之前会进行一次判断, 判断当前对象是否能够调用这个方法
id obj = [Person new];
id obj = [Student new];
if ([obj isKindOfClass:[Student class]]) {
// isKindOfClass , 判断指定的对象是否是某一个类或者是某一个类的子类
[obj eat];
}
if ([obj isMemberOfClass:[Student class]]) {
// isMemberOfClass : 判断指定的对象是否是当前指定的类的实例
[obj eat];
}
id 动态数据类型
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 定义: id是一个数据类型, 并且是一个动态数据类型 作用1.定义变量2.作为函数的参数3.作为函数的返回值 补充...
- http://blog.csdn.net/totogo2010/article/details/7714960