初始化的一般格式:一个标准初始化“模板”
-(instancetype)init
{ //先对继承链上所有的类对象进行初始化
//类似对一个对象存储空间内的父类部分先进行初始化。
self = [super init];
//当本对象已经分配好空间并初始化完成时
if (self)
{//加入适当的初始化代码
//Initialization code here.
}
return self;
}
- 书上对[super init]的解释:
先调用父类对象初始化方法,保证本对象中所有继承的实例变量都被初始化(填0或初始化为你自己的代码),当使用init时,它有可能会改变对象在内存中的位置,所以需要将这条语句执行的结果赋值给self。只有初始化不成功时,才会返回nil。自己的代码中可以加入你自己的类中的实例变量的分配和初始化过程。
上面代码中的返回类型 instancetype 是指:当init方法执行完成后,返回的类型和init方法初始化的对象类型相同。过去的时候这里是使用的 id,但是id有个弱点,继承的初始化方法不能显式定义特定类型的返回值。
当自己的类中有不止一个初始化方法时,有一个方法被称为:designated initializer(指定初始化),而其他的初始化方法都应该使用它。
总的来说,这个指定初始化方法应该是类中的最复杂的初始化方法(通常包含最多的参数)。使用指定初始化可以让主要的初始化过程都集中于单个方法中。
继承这个类后,子类可以覆盖这个指定的初始化方法来提供对更多实例变量的初始化支持。