您的位置:首页 > 其它

怎么去掉Xcode工程中的某种类型的警告

2015-10-07 20:14 399 查看
随着项目的慢慢发展,工程中的警告数量可能越来越多。这些警告有的是我们自己写出来的,有的来自第三方代码,下面以一个64位转32位损失精度的警告为例来说明如何处理警告。

产生警告的代码片段

long long i64 = 0x0000F000;int i32 = i64;NSLog(@"-------->%d", i32);

方法一:通过完善代码处理警告

对于如上的警告类型,程序员需要确定转换时是否会损失精度,

如果不会损失精度,直接强制类型转换:

long long i64 = 0x0000F000;int i32 = (int)i64;NSLog(@"-------->%d", i32);

如果会损失精度,改变变量类型:

long long i64 = 0x0000F000;long long i32 = i64;NSLog(@"-------->%lld", i32);

这种处理警告的方法主要适用于我们自己编写的代码,即:我们要知道自己写的是什么。

方法二:通过编译指示符忽略警告

1
2
3
4
5
#pragma clang diagnostic push

#pragma clang diagnostic ignored"-Wdeprecated-declarations"

//写在这个中间的代码,都不会被编译器提示-Wdeprecated-declarations类型的警告

dispatch_queue_tcurrentQueue =dispatch_get_current_queue();

#pragma clang diagnostic pop
long long i64 = 0x0000F000;
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshorten-64-to-32"
int i32 = i64;
#pragma clang diagnostic pop

使用这种方法可以在源文件的某个部分忽略警告。

方法三:通过宏控制忽略编译警告

定义宏:

#define DiscardLostPrecisionWarning(CodeBlock) /do { /_Pragma("clang diagnostic push") /_Pragma("clang diagnostic ignored /"-Wshorten-64-to-32/"") /CodeBlock; /_Pragma("clang diagnostic pop") /} while (0)

使用宏:

int i32 = 0;DiscardLostPrecisionWarning(i32 = i64);

方法四:忽略指定文件的编译警告

在 Build Phases 中为指定文件增加编译参数:-Wno-shorten-64-to-32,如下图:



这种方法可以在不修改源码的情况下忽略文件中某种类型的警告,主要适用于以源码形式引入的第三方库。

方法五:忽略指定Target的编译警告

在 Target –> Build Settings -> Custom Complier Flags -> Other Warning Flags 中增加 -Wno-shorten-64-to-32,如下图:



这种方法可以在不修改源码的情况下忽略Target中某种类型的警告。

方法六:忽略工程的编译警告

在工程中忽略警告的方法与在 Target 中忽略警告的方法类似,但是可以控制工程中的所有 Target,前提是:Target要继承 Project 的编译设置,设置继承的方法见下图:



即增加:$(inherited)。

然后设置工程的Build Settings -> Custom Complier Flags -> Other Warning Flags 中增加 -Wno-shorten-64-to-32,如下图:



然后到 Target 中可以看到编译设置为:



注意:编译设置没有使用加粗字体,说明是继承来的。

后记:

对于我们使用cocoapod引入的第三方,我们可以在podfile文件中 增加一句 inhibit_all_warnings! 来要pod的工程不显示任何警告,例如

1
2
3
4
5
6
7
8
9
10
11
12
13
link_with
'SecondHouseBrokerAPP'
,
'SecondHouseBrokerCOM'

platform :ios,
'6.0'

inhibit_all_warnings!


pod
'CocoaAsyncSocket'

pod
'Reachability'

pod
'ProtobufObjC'

pod
'SDWebImage'

pod
'FMDB'

pod
'GPUImage'

pod
'CXPhotoBrowser'

pod
'CocoaLumberjack'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: