忽略代码中的警告

开发中经常会遇到由于各种原因导致的警告,虽然不影响具体的功能,但是看起来总是让人厌烦,尤其是有强迫症的开发们,而且警告太多会影响对于真正问题的发掘,今天我们来尝试去掉这些警告.常见的警告类型有:


 常见警告的名称
1.声明变量未使用      "-Wunused-variable"
2.方法定义未实现      "-Wincomplete-implementation"
3.未声明的选择器      "-Wundeclared-selector"
4.参数格式不匹配      "-Wformat"
5.废弃掉的方法声明     "-Wdeprecated-declarations"
6.废弃掉的方法实现     "-Wdeprecated-declarations"
7.不会执行的代码       "-Wunreachable-code"
8.忽略在arc 环境下performSelector产生的 leaks 的警告 "-Warc-performSelector-leaks"
9.忽略类别方法覆盖的警告 "-Wobjc-protocol-method-implementation"(修复开源库bug,覆盖开源库方法时会用到)

 

1. 使用Xcode设置关闭警告

Xcode内置了消除警告的设置,我们可以通过Xcode的设置来全局消除所有的警告.可以按照以下步骤操作:

  1. 选中对应的Target;
  2. 在target中选择Build settings;
  3. 在二级选择框中All;
  4. 在搜索框中输入warning flags,或者直接在列表中查找Apple Clang-Custom Compilier Flags;
  5. 在Other Warning Flags中,设置对应的警告消除标识:可以根据Debug和Release模式分别设置,也可以对两种模式同时进行设置.需要注意的是,Xcode设置时与上述定义的有所不同,需要添加"no-",例如消除无用变量警告-Wno-unused-variable.

忽略代码中的警告_第1张图片

但是这种全局消除警告的方式并不安全,容易掩盖真正的警告代码,有可能会使一些严重的异常不能被及时发现,所以要慎用.

 

2. 使用#pragma命令

在iOS#pragma不仅可以对方法进行分区便于查找,还可以对警告进行忽略处理,使Xcode并再对其所定义的范围进行警告检测.忽略单个警告可以使用#pragma clang diagnostic push/pop,指定需要忽略警告的类型,并将需要忽略警告的代码写在push/pop之间:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "对应的警告类型⚠️"
//The warnings should be ignored here 
#pragma clang diagnostic pop

例如,我们需要忽略未使用的变量的警告,则可以通过以下方式实现:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-variable"
    Studen *stu = [[Studen alloc] init];
#pragma clang diagnostic pop

这样代码段中的未使用变量在编译时就不会再出现警告.

也可以在预编译时,使用具备更大作用范围的头文件中包含#pragma clang diagnostic ignored “警告名称” 
如果剔除了push与pop则后面所有的代码都具有强制消除警告作用.

你可能感兴趣的:(开发小技巧)