黑马程序员技术交流社区

标题: self关键字 [打印本页]

作者: sc33370    时间: 2016-6-22 19:32
标题: self关键字
调用父类的方法。self = [superinit]  这里不是判断self与[superinit]是否相等,而是判断是否可以成功初始化。

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

作者: SSIrreplaceable    时间: 2016-6-23 08:14
构造方法必须要先调用父类的+init方法,才可以后续的操作。
作者: M.W    时间: 2016-6-23 11:09
是的,这里确实是赋值的操作。此时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
使用时注意当前环境,在对象方法中使用代表当前对象,在类方法中使用,代表当前类。




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