Apple LLVM 7.0 - Warning - objective C
Direct userage of ‘isa’ 直接使用 isa
Duplicate Method Definitions 重复的方法定义
Implict Atomic Objective - C Properties 隐式的原子属性
Implict Synthesized Properties 隐式的合成属性
Incomplete Objective - C Protocols 不完整的实现协议方法
Overridding Deprecated Objective - C Methods 压倒一切弃用的oc方法
Strict Selector Matching 严格的选择器匹配
Undeclared Selector 未申报的选择器
Unintentional Root Class 无意的根类
警告的种类
- -Wall 并不是所有警告。这一个警告组开启的是编译器开发者对于“你所写的代码中有问题”这一命题有着很高的自信的那些警告。要是在这一组设定下你的代码出现了警告,那基本上就是你的代码真的存在严重问题了。
-Wextra 如其所名,-Wextra组提供“额外的”警告。这个组和-Wall组几乎一样有用,但是有些情况下对于代码相对过于严苛。一个很常见的例子是,-Wextra中包含了-Wsign-compare,这个警告标识会开启比较时候对signed和unsigned的类型检查,当比较符两边一边是signed一边是unsigned时,产生警告。
-Weverything 这个是真正的所有警告。但是一般开发者不会选择使用这个标识,因为它包含了那些还正在开发中的可能尚存bug的警告提示。
控制警告,局部加入或关闭
Clang提供了我们自己加入警告或者暂时关闭警告的办法。
强制加入一个警告:
//Generate a warning
#pragma message "Warning 1"
//Another way to generate a warning
#warning "Warning 2"
//Generate an error to fail the build.
#error "Something wrong"
关闭某个警告:
如果需要全局关闭的话,直接在Other C Flags里写-Wno-…就行了,比如-Wextra -Wno-sign-compare就是一个常见的组合。
如果相对某几个文件开启或禁用警告,在Build Phases的Compile Source相应的文件中加入对应的编译标识即可。
如果只是想在某几行关闭某个警告的话,可以通过临时改变诊断编译标记来抑制指定类型的警告,具体如下:
#pragma clang diagnostic push
#pragma clang diagnostic ignored “-Wunused-variable”
int a;
#pragma clang diagnostic pop
注: 把某些警告当作错误,-Werror=…即可,同样地,也可以在-Werror被激活时使用-Wno-error=…来使某些警告不成为错误。结合使用这些编译标识可以达到很好的控制。