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

Onl*_*Cop 1 facebook objective-c

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

(id) init {
    if ((self == [super init])) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

(id) init {
    if ((self = [super init])) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

或者至少:

(id) init {
    self = [super init];
    if (self) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

(对不起,如果这应该在bug跟踪器中 ;找不到实际提交任何东西的方法......: - /

小智 6

它应该分配自己,因为[super init]可能会返回一个不同于自己的对象.

检查相等性通常会起作用,但不需要工作.你应该总是分配.

我相信最近版本的clang甚至会==在这个特殊情况下使用时发出警告.