繁体   English   中英

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

[英]if(self = [super init]) - LLVM warning! How are you dealing with it?

在使用LLVM的Xcode 4之前,这没有引起注意。 条件中的赋值是完全有意的,也是一个Cocoa成语。

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

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

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

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

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

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

- (id)init {
    self = [super init];
    if (self) {
        <#initializations#>
    }
    return self;
}

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

不错的东西!

只需使用两对括号就可以清楚地告诉编译器您是故意分配的:

if ((self = [super init]))

打开项目导航器并选择您的项目。 在出现的主窗口中,选择“全部”。 在“LLVM编译器2.0 - 警告”部分下,选择“其他警告标志”。 为“Debug”和“Release”添加标记“Wno-idiomatic-parentheses”。 现在清理并重新编译。 在此输入图像描述

正如其他一些人建议你应该添加一组额外的括号。

我远离正规表达大师,所以请随意清理它,但是在Xcode中查找并​​替换了大约95%的实例:

Replace: if\s*\({1}\s*self\s*={1}(.*)\){1}
With:    if ((self =\1))

要小心,因为这也会找到if(self == ...),所以使用预览并取消选中那些或修复我的正则表达式:)

并开始使用self = ...; 如果(自我),它更清洁。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM