问题描写叙述 
在我们的项目中,通常使用了大量的第三方代码,这些代码可能非常复杂,我们不敢修改他们,但是作者已经停止更新了,当sdk升级或者是编译器升级后,这些遗留的代码可能会出现许很多多的警告,那么我们有没有办法去掉这些烦人的警告,不然一个project几百个警告,你看着怎么都不爽吧.我们怎么去掉警告呢

1.最直接,最一劳永逸,最安全的方式,直接找到警告的那段代码,改为不警告.这个方式,最安全.
但是它有一个问题,就是,当我们非常多文件都有这样的类型的警告的时候,我们就须要修改非常多非常多的源代码了, 对于不是我们写的源代码,有可能随时会更新的,我们这样的方式,显然就不太可取了.

2.使用编译器提供的宏来操作,这个方式在我们的project中会大量的看到
#pragma clang diagnostic push
#pragma clang diagnostic ignored"-Wdeprecated-declarations"
               //写在这个中间的代码,都不会被编译器提示-Wdeprecated-declarations类型的警告
dispatch_queue_tcurrentQueue =dispatch_get_current_queue();
#pragma clang diagnostic pop

这种方式的问题,同第一个几乎相同,也是要修改源码的实现的,对于第三方,我们肯定是不想修改它的,尤其是一些更新非常频繁的第三方,一般警告出现后不久,作者就更新了,我们在此做这种操作,就显得浪费了.而且在 加入arm64支持的时候,一下出现几百个某种类型的警告,改起来也是相当费时费力的啊!
比方我们的project,打开了arm64,然后编译



3.关闭某一个指定文件的某种指定类型的警告
这里,拿一个详细project来说吧.比方我们project里有一个文件  PresencePacket


事实上关闭某个指定文件的某种类型的警告非常easy,就如同我们曾经给某一个文件加入 ARC支持或者不支持的时候那样 加入 忽略/显示 某种类型警告

双击 文件, 在当中加入  -Wno-shorten-64-to-32  (这个关键在就是让编译器忽略 Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32_t' (aka 'int') 警告)

加入完毕后,再编译,那么PresencePacket文件里的  Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32_t' (aka 'int’) 警告就没有了,是不是非常easy,非常方便.



这样的方式,已经是大大的降低了工作量了,仅仅须要在指定的文件的编译中加入 -Wno-shorten-64-to-32就能够了.那么有没有什么方式能够让编译器忽略整个project中的 指定类型的警告呢?

4.关闭project中指定 类型的警告
这个最简单了, project的target有一个 Other Warning Flags 

在当中加入 -Wno-shorten-64-to-32

再又一次编译,哈哈,整个文件里的  Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32_t' (aka 'int’) 警告所有消失了!!!!


5.大家可能非常疑惑,上面的-Wno-shorten-64-to-32 是怎么来的,我怎么知道   Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32_t' (aka 'int’) 警告 就是 -Wno-shorten-64-to-32类型呢?这里,事实上不须要记忆的,当project中有这样的类型警告的时候

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


则会显示 

注意到当中 [-Wshorten-64-to-32],在这个括号里的就是 这样的警告的类型   -W是前缀,这个前缀表示的是 打开这样的类型的警告 假设我们是要关闭某种类型的警告的话, 要将 -W换成 -Wno-  
这样就得到了  -Wno-shorten-64-to-32了.



后记:
对于我们使用cocoapod引入的第三方,我们能够在podfile文件里 添加一句 
inhibit_all_warnings! 来要pod的project不显示不论什么警告,
比如
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'

还有就是,上面的方法也适合其他类型的警告!!!

參考

怎么去掉Xcodeproject中的某种类型的警告 Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32的更多相关文章

  1. (转)怎么去掉Xcode工程中的某种类型的警告 Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32

    问题描述  在我们的项目中,通常使用了大量的第三方代码,这些代码可能很复杂,我们不敢改动他们,可是作者已经停止更新了,当sdk升级或者是编译器升级后,这些遗留的代码可能会出现许许多多的警告,那么我们有 ...

  2. 怎么去掉Xcode工程中的某种类型的警告 Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32

    unsigned long numComponents = CGColorGetNumberOfComponents([[UIColor blackColor] CGColor]); 2014年12月 ...

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

    XCode警告   问题描述  在我们的项目中,通常使用了大量的第三方代码,这些代码可能很复杂,我们不敢改动他们,可是作者已经停止更新了,当sdk升级或者是编译器升级后,这些遗留的代码可能会出现许许多 ...

  4. Xcode去除某种类型的警告

      首先来看下当有警告时,怎么找到警告类型,在某条警告上,右键—>Reveal in Log     下面 [ ] 中间就是警告信息     去除警告信息的几种方式:   一.使用编译器提供的宏 ...

  5. PostgreSQL查询数据库中包含某种类型的表有哪些

    and c.relnamespace = n.oid and nspname = 'public' and a.atttypid = t.oid and typname = 'TEXT' and c. ...

  6. UNIX中的文件类型

    Unix的文件类型信息包含在stat结构的st_mode成员中可以用宏确定文件类型: 普通文件(S_ISREG()):包含某种形式数据的常用文件类型 目录文件(S_ISDIR()):这种文件包含其他文 ...

  7. 命名空间“System.Web”中不存在类型或命名空间名称“Optimization”(是否缺少程序集引用?)

    今天,在.net4.5,mvc4下新建了个区域,运行起来就报这个错误: 命名空间"System.Web"中不存在类型或命名空间名称"Optimization"( ...

  8. Rails中的MIME类型

    layout title date comments categories post rails的中的MIME类型 2014-09-08 21:40 true ruby Rails开发中经常使用不同的 ...

  9. linux下删除目录及其子目录下某种类型文件

    Linux下,如果想要删除目录及其子目录下某种类型文件,比如说所有的txt文件,则可以使用下面的命令: find . -name "*.txt" -type f -print -e ...

随机推荐

  1. #10 [AH2017/HNOI2017]大佬

    题解: 题意看上去挺复杂的 分析一下就能发现自己的自信是没啥用的 只要随便dp一下看看最多能有多少天不使用增加自信 然后问题就变成了 求C1+C2+k=C 然后发现C有10^8 显然枚举C1是不行的了 ...

  2. day8--socket网络编程进阶

    socket:socket就是实现服务器和客户端数据的交换,服务器端接收并发送数据,客户端发送并接收数据,并且需要注意的是,在python3中,socket值接收字节.因为客户端在发送连接给服务器的时 ...

  3. 068 Oozie任务调度框架

    一:概述 1.大数据协作框架 2.Hadoop的任务调度 这个是常见的任务调度框架. 3.azkaban 4..Oozie的三大功能 Oozie Workflow jobs :工作流任务,可以生成DA ...

  4. babel和postcss引起的一点儿思考

    写es6,一般都会用到babel,它能把es6转为更好的es5,而es5可以直接在浏览器上运行.postcss是css界的babel,它可以把css转为更好的css,比如autoprefixer,让不 ...

  5. BZOJ.3262.陌上花开([模板]CDQ分治 三维偏序)

    题目链接 BZOJ3262 洛谷P3810 /* 5904kb 872ms 对于相邻x,y,z相同的元素要进行去重,并记录次数算入贡献(它们之间产生的答案是一样的,但不去重会..) */ #inclu ...

  6. Table 'performance_schema.session_status' doesn't exist错误,解决办法

    Mysql升级到5.7+之后一直出现Table 'performance_schema.session_status' doesn't exist错误,解决办法 1. 进入Mysql的安装目录的bin ...

  7. Android监听view的attached或detached状态

    我们在开发中,希望监听View的attached或detached状态,来进行比如eventbus的注册与解注册的操作,非常的方便实用. 可以使用系统给我们提供的listener,代码使用如下: mV ...

  8. Linux.Centos安装scp反复失败的解决方式

    现象 在A服务器用scp命令从B服务器拉文件时, 报找不到scp指令的错误 在A服务器运行 scp --help 发现是有指令的 在B服务器上 常规方式, 安装openssh-clients yum ...

  9. C# 8.0的新的using语法——Using declarations

    我们在代码中经常使用using保障非托管资源的释放 static void Main(string[] args) { using (var options = Parse(args)) { if ( ...

  10. AngularJS中处理多个promise

    在使用AngularJS中处理promise的时候,有时会碰到需要处理多个promise的情况. 最简单的处理就是每个promise都then.如下: var app = angular.module ...