iOS #pragma clang dignostic igno
前言
首先来认识一下#pragma clang diagnostic ignored
的语法组成:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "命令"
<代码区间>
#pragma clang diagnostic pop
其中"命令"
一般以-W
开头,格式为"-W****"
,例如"-Wnonnull"
既然叫<代码区间>
,那这个代码
可以是局部的,也可以是全局的,即既可以在方法内,也可以包含整个方法。
使用场景
在开发过程中,总是不能避免⚠️警告的存在,而这些警告大部分情况下并不影响项目的编译和运行,也不影响整个业务代码的功能实现,但是警告多了就会有压迫感,甚至会让开发者心生质疑和反感,然而#pragma clang diagnostic ignored
指令可以消除这些顾虑,但前提是要确保这些指令不会影响相关业务的实现,不然会适得其反、因小失大、得不偿失。
常见场景
1.忽略参数非空警告"-Wnonnull"


2.忽略方法弃用警告"-Wdeprecated-declarations"


3.忽略类型不匹配警告"-Wincompatible-pointer-types"
(以下例子为错误示例,现实开发中请勿模仿)


4.忽略未使用的变量警告"-Wunused-variable"


5.忽略未初始化值的警告"-Wuninitialized"


6.忽略循环引用警告"-Warc-retain-cycles"
(示例有风险,请勿模仿)


7.忽略缺少default(缺少case)警告"-Wswitch"


8.忽略有效版本限制警告"-Wunguarded-availability"


9.忽略方法未申明警告"-Wundeclared-selector"


10.忽略方法未知(内存泄漏)警告"-Warc-performSelector-leaks"


11.忽略代码永不执行警告"-Wunreachable-code"


以上示例基本都是在实际开发过程中大概率会遇到的场景情况,但也只是冰山一角,随着接手的项目越多越大,开发成员的不断壮大,以上的示例可能就会淡化在视野之内,新的场景也会接踵而至,再者抛开场景不说,我们更没有那个能力将所有的
命令
装进大脑牢记心里,所以要想让盲区不再盲区,警告不再警告,那么客官请往下看。
另外提醒一句:示例有风险,模仿须谨慎,万事请三思而后行。
快速定位命令
如何在Xcode中快速定位到我们想要的命令
呢?下面我们以Unused variable 'unusedVariable'
(未使用的变量)警告为例,通过Xcode快速定位得到我们想要的命令
。
1.选择Xcode编辑器窗口导航栏Reports
菜单,如下图蓝色选中态图标项,在左侧Build
和Run
记录列表中都可查看到⚠️警告记录。

2.选择并点击左侧的警告记录,在窗口浏览区找到
unusedVariable
关键字,或者先寻找出现警告的文件名如例子中出现警告的文件名为ViewController.m
然后在此文件名下拉列表中再找unusedVariable
关键字。

3.找到对应警告后,点击对应警告浏览区右侧展开按钮,找到关键字
unusedVariable
,内容太多请向下滚动浏览,关键字一般都在内容底部,且会以特定底色标记,标记之后以[]
包含-W
开头的即为我们要找的命令
。

反向定位⚠️警告出处
右键
浏览区⚠️警告项,再点击下拉菜单Show In Timeline
选项,进入警告出处所在文件的预览窗口(可以编辑),可以拖动预览窗口上边界铺满浏览区,或者双击
浏览区⚠️警告项打开警告出处所在的文件并进行编辑。

回顾
前文我们提到“<代码区间>
这个代码
可以是局部的,也可以是全局的,即既可以在方法内,也可以包含整个方法。”,所以我们可以这样写


那么问题来了,如果是组合⚠️警告,代码块中出现多个不同类型的⚠️,此时应该如何处理呢?⁉️🧐这里留给各位客官去思考、去探索。
结尾
此处没有精彩的结尾,但可以加个彩蛋。
想必各位客官浏览完上面的陈述和图片后,肯定会对其中的一张图片印象深刻,甚至会有种茅塞顿开或者拨云见日的感觉。
<#哪张图#>
没错就是下面这张图,名眼人想必也注意到了这块区域的内容,一定感觉似成相识,我们文章开头就提到"其中"命令"
一般以-W
开头,格式为"-W****"
,例如"-Wnonnull"
",所以图中内容各位客官可想而知,至于图中出现的-f
、-i
、-o
留给各位客官包括我自己去学习、去研究。

再结尾
以上内容如有雷同,纯属巧合,如有错误,欢迎指教。