2011-07-23 44 views
2

我在理解什么/如何工作时遇到问题。似乎奇怪分配自于来自初始化消息init方法模式

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

    return self;  
} 

回答

3

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

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

这在Implementing an Initializer中描述。