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有三种忽略方式。
    2.1. 选中warning,右键选择Reveal in Log,复制warning类型,在代码中添加ignored标记。
    2.2. 对于某个文件,忽略某种类型的warning,与打ARC标记相同,添加对应类型的编译标记。
    2.3. 全局忽略某一类型warning,在工程配置中添加编译选项。