平时的开发过程当中,编译 之后总会出现各种各样的警告,对于开发者而言可以使用些特殊手段强制消除这些警告.
一,如何查看某种警告的类型
打开一个工程,编译项目(不编译Reveal in Log
是灰色的),切换左侧导航区域 issue navigator
,右键某一个警告,点击Reveal in log
,[]里面的字符串就是该警告的名称.
有以下常见的警告类型:
"-Wunused-variable" 声明变量未使用
"-Wincomplete-implementation" 方法定义未实现
"-Wundeclared-selector" 未声明的选择器
"-Wformat" 参数格式不匹配
"-Wdeprecated-declarations" 废弃掉的方法
"-Wunreachable-code" 不会执行的代码
"-Wincompatible-pointer-types" 不兼容指针类型
"-Warc-retain-cycles" 循环引用
"-W#warnings" 通过 #warning主动添加的警告
二,如何消除警告
1,自己手动改
最直接的方式,直接找到警告的那段代码修改掉.这个方式最安全.但是工作量巨大。。。
2,关闭源文件中的警告
针对项目里的某一段产生警告的代码,可以将这段代码放入以下宏控制当中:
#pragma clang diagnostic push
//"-Wunused-variable"这里就是警告的类型
#pragma clang diagnostic ignored "-Wunused-variable"
int a;
#pragma clang diagnostic pop
在宏控制里的a变量不会产生黄色警告。
也可以在作用域比较大的头文件中包含:
#pragma clang diagnostic ignored "警告名称''
如果剔除了push与pop 则后面所有的代码都具有强制消除警告作用.
3,忽略工程中警告
1)
在项目的 Build Settings
中也可以设置忽略某种或多种类型的警告,不过在这设置的影响范围就是整个项目的了.
还是上面的例子,在 Build Settings
中找到Custom Compiler Flags
,双击 Other Warning Flags
(可以配置 Debug 和 Release 环境),填入 -Wno-unused-variable
.完成后,编译项目,项目中所有的此类型警告都没有了。Build Settings
中项目全局忽略警告这里所填写的内容规则,就是在第一种方法中找到的警告标识符中的-W
字母后面加上 -Wno-
就可以了.
2)关闭某一个指定文件的某种指定类型的警告
关闭某个指定文件的某种类型的警告,Build Phases
->Compile Sources
,找到指定文件,双击文件,在其中添加-Wno-protocol
,即使该文件中未实现代理的方法,也不会产生警告.
4,针对cocoapod引入的第三方库
1)
对于我们使用cocoapod
引入的第三方,我们可以在podfile
文件中 增加一句 inhibit_all_warnings!
来要pod的工程不显示任何警告。
2)
也可以针对某一个第三方库,不显示他的警告,以AFNetworking
为例:
pod 'AFNetworking', '2.6.3', :inhibit_warnings => true