iOS开发之Warning浅谈

Warning

对于一个coding有洁癖的人来说,warning在他们眼中和error没什么区别,就像是一口痰卡在喉咙中,吐不出来,咽不下去,甚是难受。

我虽然不是一个“处女座”特性的人,但是在项目上线之前,还是要尽量保证 0 bug,0 error和 0 warning。

waring是编译器认为,你做了一些可能不是你预想那样的事情,但是你还没有意识到。编译器的职责就是严格执行你所告诉它的命令。

很多时候,有些warning是无法避免的,我在开发中遇到的最多的warning就是  unused-variabledeprecated method 这类的warning。xcode提供了多种控制warning的方法,对于不同的warning类型,也有对应的打开和关闭Flag,基本格式如下:

     -WsomeWarnig       //打开某个warning
     -Wno -someWarnig  //关闭某个warnig
     例:
     -Wunused-variable   //打开未用变量的warning
     -Wno-wariable       //关闭未用变量的warning

xcode4之前编译器用的是llvm-gcc,之后的版本用的是llvm-clang,虽然编译器有些不同,但是clang还是兼容了gcc的很多命令,关于warning的Flag可以查看下面三个链接,两个来自于官方,但建议看非官方的那个^^:

gcc:http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

clang:http://clang.llvm.org/docs/UsersManual.html

f**k waring:http://fuckingclangwarnings.com

全局

全局设置-Weverthing 可以打开所有的warning,但是一般不建议这么干,因为run一下,你懂的。

设置方式如下图:


设置完之后,就慢慢改吧。

局部

局部warning控制,最常见的就是 unused-variable 有时候,你写了变量,暂时没有用到,但是你过段时间可能要用,又不想在每次编译的时候,一直提示warning,这个时候只需要将该变量声明出加上一个局部的 #pramga 声明即可:

    #pragma clang diagnostic push
    #pragma clang diagnostic ignore "unused-variable"
    ......
    ......
    #pragma clang diagnostic pop

done,添加后,编译器在编译的时候,就会忽略push和pop之间的警告。 #pragma还可以用mark来使代码更加整洁。

ps: 关于#pragma的更多介绍可以参看本人正在翻译的NSHipster出版的《obscure-topics-in-cocoa-objective-c》这本书。


参考:

http://onevcat.com/2013/05/talk-about-warning/

http://www.bignerdranch.com/blog/a-bit-on-warnings/


如果有任何问题欢迎再下面留言,或者扫描二维码

iOS开发之Warning浅谈_第1张图片

你可能感兴趣的:(ios,warning,#pragma)