让你的代码更优雅---去掉Xcode工程中某种类型的警告

4,313 阅读2分钟

问题描述:

在我们的项目中,因为大量的使用第三方库,经常会出现各种三方库,以及我们自己再敲代码时候调用系统方法却没有实现到时的各种各样的黄色警告。作为一个有追求的程序员,不仅仅是为了实现功能而实现功能。如何去掉这些烦人的黄色警告呢?

环信easyUI中的黄色警告

软件环境:

Xcode Version 8.2.1 (8C1002)

如何查看警告的类型

在警告窗口,某个警告上,我们右击,显示出右键菜单,选择其中的Reveal in Log

展示

之后就会在右侧展示出警告类型

警告类型

注意:如果需要关闭警告需要将 -W 换位-Wno-

1.关闭使用cocopods导入的第三方库的黄色警告

去掉cocopods中导入三方库的黄色警告比较简单,只需要一行代码 inhibit_all_warnings!,如钟使用的是cocopods的客户端 cocoapods

cocopods中的代码

2.关闭整个工程中某个类型的警告

Xcode为我们提供了方法,只需要简单的配置即可。

Target --> BuildSetting --> other warnning flag
在其中添加-Wno-shorten-64-to-32即可以去掉整个工程中的 Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32_t' (aka 'int’)警告

3.关闭指定.m文件中的黄色警告

同样,Xcode同样给我们提供了配置方法,关闭指定文件中的某种类型的警告很简单。

TARGETS -- > Build Phases --->Compile Sources中双击需要关闭警告的.m文件,在其中添加添加关闭指定类型的代码即可.

关闭指定文件的警告

4.关闭某个文件中的某些警告

使用编译器提供的宏来操作

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-相关命令"
    //需要关闭警告的代码
#pragma clang diagnostic pop

下面给出一些关闭常见警告的示例

  • 1.方法弃用警告
    #pragma clang diagnostic push  
    #pragma clang diagnostic ignored "-Wdeprecated-declarations"      
    [TestFlight setDeviceIdentifier:[[UIDevice currentDevice] uniqueIdentifier]];  
    #pragma clang diagnostic pop
  • 2.不兼容指针类型
    #pragma clang diagnostic push   
    #pragma clang diagnostic ignored "-Wincompatible-pointer-types"  
     //  
    #pragma clang diagnostic pop
  • 3.循环引用
    #pragma clang diagnostic push  
    #pragma clang diagnostic ignored "-Warc-retain-cycles" 
      self.completionBlock = ^ {  
          ...  
      };  
    #pragma clang diagnostic pop
  • 4.未使用变量
    #pragma clang diagnostic push   
    #pragma clang diagnostic ignored "-Wunused-variable"  
      int a;   
    #pragma clang diagnostic pop

最后

上面讲到的几种方法,各位读者根据不同的应用场景自行选择使用。
其实对于自己写的代码最直接同时最安全方式就是,定位到自己报警告的位置,修改为不警告。
最后的最后,祝各位读者: No Bug,No Warnning!