码迷,mamicode.com
首页 > 其他好文 > 详细

动态数据类型id

时间:2016-01-12 22:57:37      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

id相当于NSObject *

但是略有不同,NSObject *是静态数据类型

如Student继承Person继承NSObject,Person有age方法,Student有score方法

Person *p=[Student new];

[p score];会编译出错,不能直接访问子类方法

Student *s=(Student *)p;

[s score];强转之后可以调用

 

id obj1=[Person new];

[obj1 age];

id obj2=[Student new];

[obj2 score];

上面调用时都可以执行的,相比省略了强转这个步骤

但是[obj1 score];虽然编译时不会报错,但是运行时会报错,因为Person没有score方法

 

所以在使用id时最好在一些判断

if([obj1 isKindOfClass:[Student class]]){....};判断某对象(obj1)是否是某个类(Student),或者其子类

if([obj1 isMemberOfClass:[Student class]]){....};判断某对象(obj1)是否是某个类(Student)的实例对象

if([Student isMemberOfClass:[Person class]]){....};判断某个类(Student)是不是另一个类(Person)的子类

 

要注意的一点:

动态数据类型的可以访问私有方法以及只有实现没有声明的方法

 

动态数据类型id

标签:

原文地址:http://www.cnblogs.com/JavaTWW/p/5125687.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!