黑马程序员技术交流社区

标题: 重写构造方法 [打印本页]

作者: zlc    时间: 2015-7-11 21:01
标题: 重写构造方法

  1. @implementation Person
  2. //当子类把父类的init覆盖了,这是默认的先执行子类的
  3. - (instancetype)init{
  4.     //先让父类把父类原来做的事情做完
  5.     self = [super init];
  6.     //判断父类是否初始化成功
  7.     if (self) {   
  8.         //此处写子类初始化的内容
  9.         _age = 10;  //给年龄设置为默认值 10岁
  10.     }
  11.     return self; //self指代的事方法的调用者
  12. }
  13. @end
复制代码

1.[super init]的作用:
面向对象的体现,先利用父类的init方法为子类实例的父类部分属性初始化
2.self为什么要赋值为[super init]:
简单来说是为了防止父类的初始化方法release掉了self指向的空间并重新alloc一块空间。这时的话[super init]可能alloc失败,这时就不再执行if中的语句
3.super作为消息接受者的实质:
super并不是真正的指针,[super message]的实质是由self来接受父类的message。需要注意的是,[super message]中,message方法出现的self为[super message]语境中的self,即子类实例。






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