XCode 4 if(self = [super init])问题

时间:2011-03-17 20:25:29

标签: objective-c xcode xcode4

我最近(例如刚刚)升级到XCode 4,我总体上喜欢它,但是,有一件事让我烦恼。

当我写这样的代码时:

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

它给了我一个'问题':Using the result of an assignment as a condition without parentheses

如何抑制此警告,因为它会以红色突出显示所有文本,让我觉得存在严重错误。由于我是一名经验丰富的Objective-C编码器,我真的不想改变我的做法并在我的初始化陈述中添加额外的括号。

8 个答案:

答案 0 :(得分:11)

您可以在if语句中添加一组括号

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

或者,你可以像新模板那样做。

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

答案 1 :(得分:3)

我在这里找到了这个问题的答案:if(self = [super init]) - LLVM warning! How are you dealing with it?

其中规定在建筑物设置中添加“-Wno-idiomatic-parentheses”标志。这对我有用。

答案 2 :(得分:3)

您可以在Build设置中取消选中'Missing Braces and Parentheses'(如果您使用GCC4.2或LLVM GCC4.2,则在'GCC 4.2警告'下)。

这相当于aeprius链接的答案,它适用于LLVM 2.0,但不适用于GCC 4.2(已测试)。

据我所知,此警告现在默认打开,以避免分配和测试之间的混淆。

正如Bavarious所指出的here,if(self = [super init]){...}在Objective-C中是惯用的。默认情况下警告已关闭在XCode 3.x中,迁移的项目似乎会自动获得“新默认”;很遗憾在迁移的项目上获得所有这些警告。

至少恢复警告不会使编码比以前在XCode 3.x中更安全。

答案 3 :(得分:2)

双重括号。

if((self = [super init]))

这只是确保你真正了解自己在做什么。

我不确定是否有办法让XC4中的实际警告静音,因为它不是编译器警告。

答案 4 :(得分:1)

将其更改为if((self = [super init])) 这表明编译器是故意的。

答案 5 :(得分:1)

你可以在self = [super init]周围放置另一组parens,或者你可以在条件之前设置self,然后评估为(self)。

答案 6 :(得分:1)

我经常这样做。

self = [super init];

如果(个体) {

}

通过这种方式,任何人都不会被混淆。

答案 7 :(得分:-4)

使用if(self == [self init]).....因为你在条件位置使用赋值运算符“=”....如果语句检查条件....你是在那里分配一个值...使用“==”而不是“=” ......

感谢名单.....