我在理解这是什么/如何工作时遇到了问题。看起来奇怪的是指定self从init消息返回
- (id)init
{
if((self=[super init])) {
//code here for setting up
}
return self;
}
答案 0 :(得分:3)
init
方法首先将隐式self
局部变量(self
是传递给方法的两个隐藏参数之一)分配给超类的指定初始值设定项的返回值。这背后的原因是初始化器可以返回与接收消息的对象不同的对象,例如,当无法正确初始化接收器或返回现有实例以避免初始化新实例时。
设置self
后,if
语句可确保仅在self
不是nil
时才初始化实例变量。如果self
为nil
,则访问实例变量的内存可能是错误的。很少有类返回nil
但仍然是有效的返回值。
Implementing an Initializer中描述了这一点。