Xcode 在 Command + B build项目时,会对代码进行静态分析检查,可能会有些警告,有些警告是”无风险“的,如实例化未使用,方法过期等,有些警告预示着代码存在运行”风险“,如类型不匹配、方法未实现、selector中使用了不存在的方法名、循环引用、自定义的警告等。我们应该对警告也要高度重视,通过正确处理,降低代码运行风险。还有些代码洁癖者,可对”无风险“警告做些忽略处理,方便查找和处理”风险“性警告。
一、通过 Xcode 配置全局性忽略警告
1、首先查看警告标识
在 Xcode 中切换到警告列表,右击某个警告,选择 Reveal in Log(有时这个选项可能是置灰状态,不能选择,可以尝试编译下项目,或者退出 Xcode 重新来一次)
下图红色框中,中括号内部的就是警告标识符(先要点击右上角展开警告才能看到这一大堆信息)
2、在 Build Settings 中项目全局忽略警告
在项目的 Build Settings 中也可以设置忽略某种或多种类型的警告,不过在这设置的影响范围就是整个项目的了,要三思而后行,不然就是给自己挖坑。
填写内容的规则,仅仅是在第一种方法中找到的警告标识符中的 W 字母后面加上 no- 就可以了。
还是上面的例子,我们可以对整个 Project 忽略警告,也可以仅限于某一个 Target 单独忽略警告,在 Build Settings 中找到 Custom Compiler Flags,双击 Other Warning Flags(可以配置 Debug 和 Release 环境),填入 -Wno-unused-variable
后,编译项目,项目中所有的此类型警告都没有了。
project → build Setting 搜索 other warning 添加 如下忽略规则
// 实例化,未使用
-Wno-unused-variable
// 过期方法
-Wno-deprecated-declarations
// self 警告
-Wno-implicit-retain-self
二、忽略 CocoaPods 第三方库警告
通过 CocoaPods 给项目导入了一些第三方库,这些库里面或多或少会有些警告,想消除这些警告,很简单,只需在 Podfile 中加上这一句 inhibit_all_warnings!,通过 CocoaPods 安装的第三库的警告就没有了。
pod 'WCDB.swift', :inhibit_warnings => true
三、局部代码处理
1、方法弃用警告
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
//code这里插入相关的代码
#pragma clang diagnostic pop
2.不兼容指针类型
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
//code这里插入相关的代码
#pragma clang diagnostic pop
3.retain cycle
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-retain-cycles"
//code这里插入相关的代码
#pragma clang diagnostic pop
4.未使用变量
#pragma clang diagnostic push
#pragma clang diagnostic ignored "--Wunused-variable"
//code这里插入相关的代码
#pragma clang diagnostic pop
5.selector中使用了不存在的方法名(在使用反射机制通过类名创建类对象的时候会需要的)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"
//code这里插入相关的代码
#pragma clang diagnostic pop