前言:先叨叨两句
在项目中,通常使用了大量的第三方代码,这些代码可能很复杂,我们不敢改动他们,可是作者已经停止更新了,当sdk升级或者是编译器升级后,这些遗留的代码可能会出现许许多多的警告,那么我们有没有办法去掉这些烦人的警告,不然一个工程几百个警告,你看着怎么都不爽吧。我们怎么去掉警告呢?
1. 最直接、最一劳永逸、最安全的方式,直接找到警告的那段代码,改为不警告。这个方式最安全。
可是它有一个问题,就是,当我们很多文件都有这种类型的警告的时候,我们就需要改动很多很多的源码了, 对于不是我们写的源码,有可能随时会更新的,我们这种方式,显然就不太可取了。
2. 使用编译器提供的宏来操作,这个方式在我们的工程中会大量的看到:
#pragma clang diagnostic push
#pragma clang diagnostic ignored"-Wdeprecated-declarations"
//写在这个中间的代码,都不会被编译器提示-Wdeprecated-declarations类型的警告
dispatch_queue_tcurrentQueue =dispatch_get_current_queue();
#pragma clang diagnostic pop
这种方式的问题,同第一个差不多,也是要修改源代码的实现的,对于第三方,我们肯定是不想改动它的,尤其是一些更新很频繁的第三方,一般警告出现后不久,作者就更新了,我们在此做这样的操作,就显得浪费了.并且在 添加arm64支持的时候,一下出现几百个某种类型的警告,改起来也是相当费时费力的啊!
下面开始操作:
比如项目中有这样的警告,选中要消除的警告,点击右键Reveal in Log,查看,会看到这个页面
重点来了,红框标记的就是要消除警告的关键所在,如果我们是要关闭某种类型的警告的话, 要将 -W换成 -Wno- ,比如-Wunguarded-availability改成-Wno-unguarded-availability,然后复制一下-Wno-unguarded-availability
把你copy 的-Wno-unguarded-availability粘贴到这里就行了,同样的方法,消除掉其他的警告,然后clean一下工程,重新运行
是不是警告全没了,惊不惊喜,意不意外,作为一个优秀的程序员,警告就是错误的时代,是不是又可以装一把!
网友评论