init方法模式

时间:2011-07-23 10:25:57

标签: iphone objective-c ios4

我在理解这是什么/如何工作时遇到了问题。看起来奇怪的是指定self从init消息返回

- (id)init
{
    if((self=[super init])) {
       //code here for setting up
    }

    return self;    
}

1 个答案:

答案 0 :(得分:3)

init方法首先将隐式self局部变量(self是传递给方法的两个隐藏参数之一)分配给超类的指定初始值设定项的返回值。这背后的原因是初始化器可以返回与接收消息的对象不同的对象,例如,当无法正确初始化接收器或返回现有实例以避免初始化新实例时。

设置self后,if语句可确保仅在self不是nil时才初始化实例变量。如果selfnil,则访问实例变量的内存可能是错误的。很少有类返回nil但仍然是有效的返回值。

Implementing an Initializer中描述了这一点。