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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sc33370 中级黑马   /  2016-6-22 19:32  /  1102 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

调用父类的方法。self = [superinit]  这里不是判断self与[superinit]是否相等,而是判断是否可以成功初始化。

[super init]:父类初始化成功的话,通过=给self,这样self成为一个非空对象,整个来说即非false(非NO)。

3 个回复

倒序浏览
构造方法必须要先调用父类的+init方法,才可以后续的操作。
回复 使用道具 举报
是的,这里确实是赋值的操作。此时self在重写的init方法中,指代的是当前的对象。
所以其实这里不将父类的初始化对象赋值给self也是可以初始化当前的子类对象的,即:if ([supper init]){}
但是就会存在一个问题:-->子类将丢失父类中初始化的变量数据。
如:Student继承自Person
Person *p = [Person alloc] init];
p.age = 10;
...
在子类的重写构造方法中如果不将[supper init];赋值给self,则子类继承到的age属性的值将丢失
回复 使用道具 举报
选择天涯 来自手机 中级黑马 2016-6-23 17:40:57
板凳
使用时注意当前环境,在对象方法中使用代表当前对象,在类方法中使用,代表当前类。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马