使用#pragma 聲明是彰顯 Objective-C 工藝的標(biāo)志之一蔗喂。雖然 #pragma 最初的目的是為了使得源代碼在不同的編譯器下兼容的晰甚,但精明的Xcode編碼器將 #pragma 使用到了極致缚俏。
在現(xiàn)在的背景下绵疲,#pragma 避開(kāi)了注釋和代碼之間的界限答毫。作為預(yù)處理指令呛伴,#pragma 在編譯時(shí)進(jìn)行計(jì)算勃痴。但它并不像如 #ifdef...#endif 之類(lèi)的宏,#pragma 的使用方式不會(huì)改變你的應(yīng)用運(yùn)行時(shí)的行為热康。相反的沛申,#pragma 聲明主要由 Xcode 用來(lái)完成兩個(gè)主要任務(wù):整理代碼和防止編譯器警告。
在iOS開(kāi)發(fā)過(guò)程中, 我們可能會(huì)碰到一些系統(tǒng)方法棄用警告姐军、循環(huán)引用铁材、未使用的變量之類(lèi)的警告。我們可以使用#pragma 聲明來(lái)防止編譯器報(bào)警告奕锌,基本語(yǔ)法:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-相關(guān)命令"
// 你自己的代碼
#pragma clang diagnostic pop
iOS常用的忽略警告類(lèi)型
1. 未使用變量警告
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-variable"
NSInteger variableValue;
#pragma clang diagnostic pop
2. 方法棄用警告
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
// Some function be deprecated
#pragma clang diagnostic pop
3. 不兼容指針類(lèi)型
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
//
#pragma clang diagnostic pop
4. 循環(huán)引用
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-retain-cycles"
//循環(huán)引用
#pragma clang diagnostic pop
5. 內(nèi)存泄漏警告
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
//內(nèi)存泄漏警告
#pragma clang diagnostic pop