我不喜欢以下建筑
if (self = [super init])
{
//do something with self assuming it has been created
}
以下是等效的吗?
self = [super init];
if (self != nil)
{
//Do something with Self
}
答案 0 :(得分:7)
是的。 =运算符返回值。
答案 1 :(得分:2)
您可能还希望在他的"self = [stupid init];"帖子中提及Wil Shipley对此的看法。他最初推荐
- (id)init;
{
if (![super init])
return nil;
[...initialize my stuff...]
return self;
}
但展示了一些目前可能会失败的案例,并且可能无法与Apple未来的某些更改一起使用。他现在推荐
- (id)init;
{
if (!(self = [super init]))
return nil;
// other stuff
return self;
}
答案 2 :(得分:1)
Lars D有您的答案,但如果您正在寻找清理init
方法的方法,我更喜欢以下内容:
- (id)init
{
if ((self = [super init]) == nil) { return nil; }
// your logic
return self;
}
它将所有令人不快的事情变成了一行,并且它使你的方法的其余部分没有一个if
语句(以及相关的括号)。