黑马程序员技术交流社区

标题: 关于构造函数的一点小问题 [打印本页]

作者: LeeWong    时间: 2014-10-22 15:38
标题: 关于构造函数的一点小问题

主要是这个图片里的内容:
在执行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类啊

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

作者: 星河鹭起    时间: 2014-10-22 15:51
这个是一步步初始化,先初始化父类,然后再初始化子类。
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的值不同的。
作者: LeeWong    时间: 2014-10-22 16:04
星河鹭起 发表于 2014-10-22 15:51
这个是一步步初始化,先初始化父类,然后再初始化子类。
Student的ISA指向Person,Person的ISA指向NSObject ...

ISA指向取决于他继承自什么类  如果是Student类 ISA就是Person 如果是 Person类就ISA指向NSObject
这样理解对吗?
那是不是意味着 一旦一个初始化完成了ISA的指向就不会发生变化了呢?
作者: 星河鹭起    时间: 2014-10-22 16:40
LeeWong 发表于 2014-10-22 16:04
ISA指向取决于他继承自什么类  如果是Student类 ISA就是Person 如果是 Person类就ISA指向NSObject
这样理 ...

可以这么理解




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2