iOS开发#pragma预处理指令
程序员文章站
2022-05-04 23:33:31
...
- 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