init应该在自我初始化上分配或测试相等吗?

时间:2011-10-20 18:37:01

标签: objective-c facebook

我今天从https://github.com/facebook/facebook-ios-sdk.git克隆,并注意到代码中有两个有这个结构的位置:

(id) init {
    if ((self == [super init])) {
        ...
    }
}

我希望在这里分配self,而不是为了平等而进行测试:

(id) init {
    if ((self = [super init])) {
        ...
    }
}

或至少:

(id) init {
    self = [super init];
    if (self) {
        ...
    }
}

这是在src/FBDialog.msample/Hackbook/Hackbook/DataSet.m

之内

(对不起,如果这应该在bug tracker中;无法找到实际提交任何内容的方法......: - /

2 个答案:

答案 0 :(得分:6)

它应指定 self,因为[super init]可能会返回与self不同的对象。

检查是否相同经常工作,但不需要工作。您应始终分配

我相信在这种特殊情况下使用==时,最新版本的clang甚至会发出警告。

答案 1 :(得分:1)

XCode 3中新的Objective-C类的模板用于给你#2(除了括号更少)。

有些不理解并且认为这是错误的人将其改为#1。

我猜Apple认为它令人困惑所以现在在XCode 4中模板给你#3。实际上,它会为#2发出警告(可能只有没有额外的括号)。