if(self = [super init]) - LLVM警告!你是怎么处理它的?

Ada*_*ach 11 iphone objective-c llvm xcode4

在使用LLVM的Xcode 4之前,这未经注意到了编译器.条件中的赋值是完全有意的,也是一个Cocoa成语.

选择了LLVM编译器的Xcode 4永远不会抱怨,而不仅仅是在编译时,只要你输入它就会出现黄色警告图标.将警告视为错误而忽略警告似乎不是一个好主意.将分配移出括号会浪费空间.必须为每个新项目用pragma关闭此警告将变得乏味.

你是怎么处理它的?新的成语是什么?

Lil*_*ard 18

这实际上是一个非常古老的警告,它默认关闭GCC和Clang 1.6.Xcode实际上应该给你一个如何解决它的建议 - 即括号加倍.

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

额外的一对parens告诉编译器你确实打算在条件中进行赋值.


Ken*_*ner 10

如果您从较新的Xcode文本宏创建一个init方法,您会注意到执行init的新祝福方式是:

- (id)init {
    self = [super init];
    if (self) {
        <#initializations#>
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

这避免了警告.虽然我个人在我自己的代码中,如果我遇到这个,我只是应用凯文显示的方法.

不错的东西!

  • 不确定你可以称之为一个新的"祝福方式".Apple一直对编码风格不一致. (2认同)