iOS開發#pragma預處理指令

A訫飛Flyme發表於2017-12-20
  • 1 #pragma 預處理指令

在C/C++標準中,#pragma是一條預處理的指令(preprocessor directive)。簡單地說,#pragma是用來向編譯器傳達語言標準以外的一些資訊。 在你的 @implementation 中使用 #pragma mark 來將程式碼分割成邏輯區塊。這些邏輯區塊不僅僅使得閱讀程式碼本身容易許多,也為Xcode源導航增加了視覺線索(#pragma mark 宣告前有一個水平分割並由破折號(-)開始)。如下:

#pragma mark - UITableViewDelegate  
複製程式碼
  • 2 #pragma clang diagnostic clang診斷設定

在iOS開發中,clang diagnostic(clang 診斷設定) 是#pragma的常用命令:

#pragma clang diagnostic push  
#pragma clang diagnostic ignored "-相關命令"  
    // 你自己的程式碼  
#pragma clang diagnostic pop 
複製程式碼

-相關命令

  • 3 自定義警告Warning 或error

兩種強制警告的方法在視覺效果上結果是一樣的,但是警告型別略有不同,一個是-W#pragma-messages,另一個是-W#warnings。對於第二種寫法,把warning換成error,可以強制使編譯失敗。比如在釋出一些需要API Key之類的類庫時,可以使用這個方法來提示別的開發者別忘了輸入必要的資訊。

#pragma message "Warning" 
#warning "Warning 2" 
#error "Something wrong"
複製程式碼

瞭解更多談談Objective-C的警告 ###下面來點黑科技(然並卵)

  • 遮蔽方法廢棄警告
#pragma clang diagnostic push    
#pragma clang diagnostic ignored "-Wdeprecated-declarations"        
[TestFlight setDeviceIdentifier:[[UIDevice currentDevice] uniqueIdentifier]];    
#pragma clang diagnostic pop  
複製程式碼
  • 遮蔽不相容指標型別警告
#pragma clang diagnostic push     
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"    
      //code
#pragma clang diagnostic pop  
複製程式碼
  • 遮蔽迴圈引用警告
// completionBlock是手動殺了AFURLConnectionOperation打破保留週期。
// completionBlock is manually nilled out in AFURLConnectionOperation to break the retain cycle.    
#pragma clang diagnostic push    
#pragma clang diagnostic ignored "-Warc-retain-cycles"   
    self.completionBlock = ^ {    
        ...    
    };    
#pragma clang diagnostic pop  
複製程式碼
  • 遮蔽未使用變數警告
#pragma clang diagnostic push     
#pragma clang diagnostic ignored "-Wunused-variable"    
    int a;     
#pragma clang diagnostic pop  
複製程式碼

轉自

關於#pragma #pragma 處理警告 XCode啟用/關閉Clang Warnings 結束

相關文章