- 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
複製程式碼