研发效率:iOS常见warning梳理

iOS常见warning梳理

常见warning类型

|warning类型 | 影响 | 修复方式 | 严重等级 |
|—|—|—|
| 方法有定义无实现 | crash | 补齐或删除方法 | P0 |
| 调用不存在的方法 | crash | 调用正确方法 | P0 |
| 调用系统DEPRECATED方法/属性 | crash、bug | 分系统进行调用 | P0 |
| 方法调用中参数类型错误 | crash、bug | 转化对象类型 | P0 |
| 赋值类型不一致 | crash、bug | 转化对象类型 | P0 |
| 未调用super方法 | 内存泄漏、bug | 调用super | P0 |
| 循环引用 | 内存泄漏 | weak strong dance | P0 |
| 重名代理 | bug | 改名 | P1 |
| 重名宏 | bug | 改名 | P1 |
| 子类与父类有重名同类型属性 | bug | 删除其中一个 | P1 |
| 子类与父类有重名不同类型属性 | bug | 子类添加忽略警告标记,@dynamic动态合成属性 | P1 |
| 格式化输出类型不一致 | bug | 强制转换类型 | P1 |
| @required代理未实现 | bug | 补齐代理方法 | P1 |
| 工程未按推荐方式配置 | warning提示等级、编译选项等存在风险 | 更新到recommend settings | P1 |
| MRC文件内存泄漏警告 | 性能浪费 | 修复代码或添加ARC标记 | P1 |
| 临时变量无初始值 | bug | 赋初始值 | P1 |
| 枚举赋值类型不一致 | bug | 修改代码 | P1 |
| 非对象属性加了* | bug | 删除* | P1 |
| 代码中包含非法字符 | 编译器无法识别 | 删除非法字符 | P1 |
| Nullable/NonNull标记不全 | 产生大量warning | 删除或补全该文件内的标记 | P2 |
| 未使用的临时变量 | 性能浪费 | 删除无用变量 | P2 |
| 未使用的static变量 | 性能浪费 | 删除无用变量 | P2 |
| 代理类未添加代理标记 | 类型检查警告 | 添加代理 | P2 |
| performSelector | 不推荐使用的方法调用方式 | 直接调用方法 | P2 |
| 第三方库最低版本与主工程不一致 | 编译警告 | 添加-w linker标记 | P2 |
| .c文件的64/32位警告 | 编译警告 | 添加-Wno-shorten-64-to-32文件标记 | P2 |
| import文件名大小写错误 | 无 | 修复文件名 | P3 |
| 非法注释 | 注释格式不规范,无法快捷查看定义 | 使用系统快捷注释 | P3 |
| block定义不规范 | 类型检查警告 | 补齐void | P3 |
| 工程有文件引用但文件不存在 | 文件索引失败 | bug | P3 |
| asset有索引无文件 | bug | 删除索引 | P3 |
| search path存在,文件不存在 | 找不到索引 | 删除search path | P3 |

修复warning的方式

  1. 根据编译器提示修复。
  2. 对于暂不修复的warning有三种忽略方式。
    1. 选中warning,右键选择Reveal in Log,复制warning类型,在代码中添加ignored标记。
    1. 对于某个文件,忽略某种类型的warning,与打ARC标记相同,添加对应类型的编译标记。
    1. 全局忽略某一类型warning,在工程配置中添加编译选项。