我今天从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.m
和sample/Hackbook/Hackbook/DataSet.m
。
(对不起,如果这应该在bug tracker中;无法找到实际提交任何内容的方法......: - /
答案 0 :(得分:6)
它应指定 self,因为[super init]
可能会返回与self不同的对象。
检查是否相同经常工作,但不需要工作。您应始终分配。
我相信在这种特殊情况下使用==
时,最新版本的clang甚至会发出警告。
答案 1 :(得分:1)
XCode 3中新的Objective-C类的模板用于给你#2(除了括号更少)。
有些不理解并且认为这是错误的人将其改为#1。
我猜Apple认为它令人困惑所以现在在XCode 4中模板给你#3。实际上,它会为#2发出警告(可能只有没有额外的括号)。