这段代码是否相同

时间:2009-11-07 08:52:20

标签: iphone objective-c syntax

我不喜欢以下建筑

    if (self = [super init])
{
 //do something with self assuming it has been created
}

以下是等效的吗?

self = [super init];

if (self != nil)
{
 //Do something with Self
 }

3 个答案:

答案 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语句(以及相关的括号)。