簡體   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