- 1 #pragma 預(yù)處理指令
在C/C++標(biāo)準(zhǔn)中,#pragma是一條預(yù)處理的指令(preprocessor directive)。簡(jiǎn)單地說(shuō)衣盾,#pragma是用來(lái)向編譯器傳達(dá)語(yǔ)言標(biāo)準(zhǔn)以外的一些信息。
在你的 @implementation 中使用 #pragma mark 來(lái)將代碼分割成邏輯區(qū)塊。這些邏輯區(qū)塊不僅僅使得閱讀代碼本身容易許多巨双,也為Xcode源導(dǎo)航增加了視覺(jué)線索(#pragma mark 聲明前有一個(gè)水平分割并由破折號(hào)(-)開(kāi)始)。如下:
#pragma mark - UITableViewDelegate
- 2 #pragma clang diagnostic clang診斷設(shè)置
在iOS開(kāi)發(fā)中霉祸,clang diagnostic(clang 診斷設(shè)置) 是#pragma的常用命令:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-相關(guān)命令"
// 你自己的代碼
#pragma clang diagnostic pop
- 3 自定義警告Warning 或error
兩種強(qiáng)制警告的方法在視覺(jué)效果上結(jié)果是一樣的筑累,但是警告類(lèi)型略有不同,一個(gè)是-W#pragma-messages脉执,另一個(gè)是-W#warnings疼阔。對(duì)于第二種寫(xiě)法,把warning換成error半夷,可以強(qiáng)制使編譯失敗婆廊。比如在發(fā)布一些需要API Key之類(lèi)的類(lèi)庫(kù)時(shí),可以使用這個(gè)方法來(lái)提示別的開(kāi)發(fā)者別忘了輸入必要的信息巫橄。
#pragma message "Warning"
#warning "Warning 2"
#error "Something wrong"
下面來(lái)點(diǎn)黑科技(然并卵)
- 屏蔽方法廢棄警告
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
[TestFlight setDeviceIdentifier:[[UIDevice currentDevice] uniqueIdentifier]];
#pragma clang diagnostic pop
- 屏蔽不兼容指針類(lèi)型警告
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
//code
#pragma clang diagnostic pop
- 屏蔽循環(huán)引用警告
// completionBlock是手動(dòng)殺了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
關(guān)于#pragma
#pragma 處理警告
XCode啟用/關(guān)閉Clang Warnings
結(jié)束