作为预处理指令,#pragma 在编译时进行计算。但它并不像如 #ifdef…#endif 之类的宏,#pragma 的使用方式不会改变你的应用运行时的行为。相反的,#pragma 声明主要由 Xcode 用来完成两个主要任务:整理代码和防止编译器警告。
编译器不显示相应的警告
1、方法启用告警
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
//可能会报警的代码
#pragma clang diagnostic pop
2.不兼容指针类型
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
//可能会报警的代码
#pragma clang diagnostic pop
3.retain cycle
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-retain-cycles"
//可能会报警的代码
#pragma clang diagnostic pop
4.未使用变量
#pragma clang diagnostic push
#pragma clang diagnostic ignored "--Wunused-variable"
//可能会报警的代码
#pragma clang diagnostic pop
5.selector中使用了不存在的方法名(在使用反射机制通过类名创建类对象的时候会需要的)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"
//可能会报警的代码
#pragma clang diagnostic pop
6.整型常量不在枚举范围内
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wassign-enum"
//code这里插入相关的代码
#pragma clang diagnostic pop
7.忽略参数非空检查
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnonnull"
//code这里插入相关的代码
#pragma clang diagnostic pop