(id)init {
//
先讓父類別進行初始化
if (self = [super init])
{
// do
something
}
return
self;
}
if(self=[super init])
首先的是[super
init],使超类完成自己的初始化工作。
if(self=[super
init])这条语句的意思,[super
init]是初始化父类中的变量方法,self=[super
init]就相当于子类也初始化了这些变量和方法,而用if判断下,是为了防止self为空的情况,即创建失败的情况。
self被指定为返回值,这个返回值通过self
=[super
init]中发送给super对象的init消息得来。它只意味着在Object-C中我们必须手工调用父类得init方法。没有对父类的自动调用。我们必须指定self为[super
init]的返回值,因为它可能会返回nil。(非常重要的语法知识)
Objective-C创建对象需通过两个消息:alloc以及init。alloc的作用是分派存储器空间,init则是对对象做初始化。init与alloc都是定义在NSObject里的类方法,当对象收到这两个消息并做出正确回应后,新实体才算准备妥当。
特别注意:在Objective-c中,这句话中,if(self=[super
init])为什么不用“==”而用"="
这里不是判断self与[super
init]是否相等,而是判断是否可以成功初始化。
[super
init]:父类初始化成功的话,通过=给self,这样self成为一个非空对象,整个来说即非false(非NO)。
于是也就变成了:
if
( !false )
{
//成功初始化后执行的代码
}
如果init失败 self则为空
if条件为假,于是if段内语句不执行
父类进行初始化时,用的是子类对象指针self,父类的init方法有可能对这个指针指向的内存区作了大的变更(有可能把这个指针所指的内存释放了,
重新分配了另一块内存区域返回来,这时这个返回的指针与原来的指针是指向不同地址的),所以父类初始化后要重新返回指针。
父类返回的和子类的self的类型都为id类型(通用类型)。父类的init方法若返回的指针与self不一样,
在父类的init方法中已作了release和新的内存分配,不需要自己再去release
sef,直接用父类init方法返回的指针就可以了。