欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

super init

程序员文章站 2022-07-12 08:02:09
...

【构造方法】

1.通常面向对象的语言都有在创建对象的时候,使用构造方法
2.在OC当中,所有init开头的方法,都是要手动调用的,是对类的对象进行初始化,包含两种,有参和无参
self其实就是对象本身,谁调用这个方法,谁就是self
super: 调用父类方法的关键字
id:等价于void*【某些情况下】

自定义的init方法,都必须调用父类的init方法。
一般情况下为:

- (id)init
{
 [super init];
 xxx = xxx;
}

通常情况下,这种模式可以满足绝大多数的需求,但是在少量情况下,需要一些特殊处理。
1,出于优化的考虑,init方法会释放已经分配了内存的对象,然后创建另一个新对象并返回之。
2,init方法在执行过程中发生了错误,所以会释放对象并返回nil。

对于1,苹果官网的做法是将父类init方法的返回值给self,对于2,苹果官网的做法是检测父类返回的对象是否为nil,为nil则不需要继续进行。

所以,苹果推荐的init自定义方法是:

- (id)init
{
 self = [super init];
 if(self)
 {     
       xxx = xxx;
 }

 return self;
}

init中,可以直接进行赋值,也可以使用存取方法。
偏好直接赋值的人认为:对象只有执行完init之后,才能完成初始化。
偏好使用存取方法的人认为:存取方法除了能为实例变量赋值之外,还能做其他的事情。只要是设置实例变量,都可以使用存取方法。

【说明】
为什么用super init,通常情况下,我们一个类的对象都是有父类的属性,加上自己特有的属性构成。在创建一个对象的时候,首先要对父类的属性进行init,判断父类是否init成功,再来构造自己的属性
init就是对我们创建的对象进行初始化

相关标签: init