为什么'init'方法由同一个对象运行两次?

时间:2016-07-24 10:49:04

标签: objective-c

我知道超类(Person)的'init'方法可以在执行子类(Student)的'init'方法之前执行。但是为什么那两个或三个'init'(我猜NSObject的'init'可以也可以执行)可以由学生的同一个对象执行吗?

 @interface Person : NSObject
 @end

 @implementation Person
 - (id)init{
 if (self = [super init]) {
 NSLog(@"init--------%@",[self class]);
   }
 return self;
 }
 @end

 @interface Student : Person
 @end

 @implementation Student
 - (id)init{
 if (self = [super init]) {
 NSLog(@"init--------%@",[self class]);
    }
 return self;
 }
 @end


int main(int argc, const char * argv[]) {

 Student *s = [Student alloc];
 Student *ss = [s init];

 return 0;

 }

我的代码的结果:

初​​始化--------学生

初​​始化--------学生

1 个答案:

答案 0 :(得分:2)

当你调用超类的方法时,你的类类型没有改变。当您init Student对象时,它会调用init Person,但它仍然是Student