美文网首页
iOS #pragma clang dignostic igno

iOS #pragma clang dignostic igno

作者: BiBiMan | 来源:发表于2023-05-08 17:24 被阅读0次

    前言

    首先来认识一下#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"

    缺少default(缺少case)警告 警告消失术

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

    有效版本限制警告 警告消失术

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

    方法未申明警告 警告消失术

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

    方法未知(内存泄漏)警告 警告消失术

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

    代码永不执行警告 警告消失术
    以上示例基本都是在实际开发过程中大概率会遇到的场景情况,但也只是冰山一角,随着接手的项目越多越大,开发成员的不断壮大,以上的示例可能就会淡化在视野之内,新的场景也会接踵而至,再者抛开场景不说,我们更没有那个能力将所有的命令装进大脑牢记心里,所以要想让盲区不再盲区,警告不再警告,那么客官请往下看。

    另外提醒一句:示例有风险,模仿须谨慎,万事请三思而后行。

    快速定位命令

    如何在Xcode中快速定位到我们想要的命令呢?下面我们以Unused variable 'unusedVariable'(未使用的变量)警告为例,通过Xcode快速定位得到我们想要的命令
    1.选择Xcode编辑器窗口导航栏Reports菜单,如下图蓝色选中态图标项,在左侧BuildRun记录列表中都可查看到⚠️警告记录。

    选择Reports导航菜单
    2.选择并点击左侧的警告记录,在窗口浏览区找到unusedVariable关键字,或者先寻找出现警告的文件名如例子中出现警告的文件名为ViewController.m然后在此文件名下拉列表中再找unusedVariable关键字。 查找关键字
    3.找到对应警告后,点击对应警告浏览区右侧展开按钮,找到关键字unusedVariable,内容太多请向下滚动浏览,关键字一般都在内容底部,且会以特定底色标记,标记之后以[]包含-W开头的即为我们要找的命令 找到命令

    反向定位⚠️警告出处

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

    反向定位警告出处

    回顾

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

    方法内 也可以这样写 整个方法
    那么问题来了,如果是组合⚠️警告,代码块中出现多个不同类型的⚠️,此时应该如何处理呢?⁉️🧐这里留给各位客官去思考、去探索。

    结尾

    此处没有精彩的结尾,但可以加个彩蛋。
    想必各位客官浏览完上面的陈述和图片后,肯定会对其中的一张图片印象深刻,甚至会有种茅塞顿开或者拨云见日的感觉。

    <#哪张图#>
    

    没错就是下面这张图,名眼人想必也注意到了这块区域的内容,一定感觉似成相识,我们文章开头就提到"其中"命令"一般以-W开头,格式为"-W****",例如"-Wnonnull"",所以图中内容各位客官可想而知,至于图中出现的-f-i-o留给各位客官包括我自己去学习、去研究。

    彩蛋

    再结尾

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

    谢谢观看

    相关文章

      网友评论

          本文标题:iOS #pragma clang dignostic igno

          本文链接:https://www.haomeiwen.com/subject/wtvksdtx.html