2
我在理解什么/如何工作时遇到问题。似乎奇怪分配自于来自初始化消息init方法模式
- (id)init
{
if((self=[super init])) {
//code here for setting up
}
return self;
}
我在理解什么/如何工作时遇到问题。似乎奇怪分配自于来自初始化消息init方法模式
- (id)init
{
if((self=[super init])) {
//code here for setting up
}
return self;
}
的init
方法首先分配隐式self
局部变量(self
是传递给方法的两个隐藏参数之一),以指定的超类的的返回值返回初始化程序。其原因在于,初始化器可以返回与接收消息的对象不同的对象,例如,当无法正确初始化接收器或返回现有实例以避免初始化新接收器时,它可能会返回不同的对象。
在设置了self
之后,if
语句确保实例变量仅在self
不是nil
时才被初始化。如果self
为nil
,则访问实例变量的内存可能是错误。极少数班级返回nil
,但仍然是有效的返回值。