A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© LeeWong 中级黑马   /  2014-10-22 15:38  /  1154 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


主要是这个图片里的内容:
在执行Student *s = [[Student alloc] init];
优先调用 Student中的init方法  在执行至 if(self = [super init])时 转到调用Person的init方法
执行至 Person类的init方法至 if(self = [super init])时 转到调用NSObject的init方法
执行至NSObject的init方法至 isa = [  X class];时(X谁调用他 X就表示那个类)
我的问题:
       这几步中 是谁调用了NSObject ,Student只能通过调用Person类来调用NSObject 类吧  也就是说最后的isa的值应该是Person吧 (老师讲的是Student)Student只是调用了Person类,并没有直接调用NSObject吧
我的理解:Student是继承自Person类 那么由于Student类中并未对isa进行重新赋值 那么他的isa的值应该是跟 Person的相同吧! Person由于是自己调用的NSObject中的init 所以isa理应指向Person类啊

可能我的理解存在某些误区  还请各位指正!

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

3 个回复

倒序浏览
这个是一步步初始化,先初始化父类,然后再初始化子类。
Student的ISA指向Person,Person的ISA指向NSObject,当NSObject初始化成功后,就初始化Person的,Person初始化成功后就初始化Student类。
Student和Person中的ISA值肯定不同:
  1>ISA是一个指针,保存的是地址。
  2>Student的ISA指向Person,Person的ISA指向NSObject。NSObject所在的地址肯定跟Person不同,所以两个ISA的值不同的。
回复 使用道具 举报
星河鹭起 发表于 2014-10-22 15:51
这个是一步步初始化,先初始化父类,然后再初始化子类。
Student的ISA指向Person,Person的ISA指向NSObject ...

ISA指向取决于他继承自什么类  如果是Student类 ISA就是Person 如果是 Person类就ISA指向NSObject
这样理解对吗?
那是不是意味着 一旦一个初始化完成了ISA的指向就不会发生变化了呢?
回复 使用道具 举报
LeeWong 发表于 2014-10-22 16:04
ISA指向取决于他继承自什么类  如果是Student类 ISA就是Person 如果是 Person类就ISA指向NSObject
这样理 ...

可以这么理解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马