前言
首先來(lái)認(rèn)識(shí)一下#pragma clang diagnostic ignored
的語(yǔ)法組成:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "命令"
<代碼區(qū)間>
#pragma clang diagnostic pop
其中"命令"
一般以-W
開(kāi)頭嚷闭,格式為"-W****"
,例如"-Wnonnull"
既然叫<代碼區(qū)間>
,那這個(gè)代碼
可以是局部的,也可以是全局的谋右,即既可以在方法內(nèi)嘹害,也可以包含整個(gè)方法胚迫。
使用場(chǎng)景
在開(kāi)發(fā)過(guò)程中嘉抓,總是不能避免??警告的存在毡泻,而這些警告大部分情況下并不影響項(xiàng)目的編譯和運(yùn)行,也不影響整個(gè)業(yè)務(wù)代碼的功能實(shí)現(xiàn)媳瞪,但是警告多了就會(huì)有壓迫感骗炉,甚至?xí)岄_(kāi)發(fā)者心生質(zhì)疑和反感,然而#pragma clang diagnostic ignored
指令可以消除這些顧慮蛇受,但前提是要確保這些指令不會(huì)影響相關(guān)業(yè)務(wù)的實(shí)現(xiàn)句葵,不然會(huì)適得其反、因小失大、得不償失乍丈。
常見(jiàn)場(chǎng)景
1.忽略參數(shù)非空警告"-Wnonnull"
2.忽略方法棄用警告"-Wdeprecated-declarations"
3.忽略類型不匹配警告"-Wincompatible-pointer-types"
(以下例子為錯(cuò)誤示例剂碴,現(xiàn)實(shí)開(kāi)發(fā)中請(qǐng)勿模仿)
4.忽略未使用的變量警告"-Wunused-variable"
5.忽略未初始化值的警告"-Wuninitialized"
6.忽略循環(huán)引用警告"-Warc-retain-cycles"
(示例有風(fēng)險(xiǎn),請(qǐng)勿模仿)
7.忽略缺少default(缺少case)警告"-Wswitch"
8.忽略有效版本限制警告"-Wunguarded-availability"
9.忽略方法未申明警告"-Wundeclared-selector"
10.忽略方法未知(內(nèi)存泄漏)警告"-Warc-performSelector-leaks"
11.忽略代碼永不執(zhí)行警告"-Wunreachable-code"
以上示例基本都是在實(shí)際開(kāi)發(fā)過(guò)程中大概率會(huì)遇到的場(chǎng)景情況轻专,但也只是冰山一角忆矛,隨著接手的項(xiàng)目越多越大,開(kāi)發(fā)成員的不斷壯大铭若,以上的示例可能就會(huì)淡化在視野之內(nèi)洪碳,新的場(chǎng)景也會(huì)接踵而至,再者拋開(kāi)場(chǎng)景不說(shuō)叼屠,我們更沒(méi)有那個(gè)能力將所有的
命令
裝進(jìn)大腦牢記心里瞳腌,所以要想讓盲區(qū)不再盲區(qū),警告不再警告镜雨,那么客官請(qǐng)往下看嫂侍。
另外提醒一句:示例有風(fēng)險(xiǎn),模仿須謹(jǐn)慎荚坞,萬(wàn)事請(qǐng)三思而后行挑宠。
快速定位命令
如何在Xcode中快速定位到我們想要的命令
呢?下面我們以Unused variable 'unusedVariable'
(未使用的變量)警告為例颓影,通過(guò)Xcode快速定位得到我們想要的命令
各淀。
1.選擇Xcode編輯器窗口導(dǎo)航欄Reports
菜單,如下圖藍(lán)色選中態(tài)圖標(biāo)項(xiàng)诡挂,在左側(cè)Build
和Run
記錄列表中都可查看到??警告記錄碎浇。
2.選擇并點(diǎn)擊左側(cè)的警告記錄,在窗口瀏覽區(qū)找到
unusedVariable
關(guān)鍵字璃俗,或者先尋找出現(xiàn)警告的文件名如例子中出現(xiàn)警告的文件名為ViewController.m
然后在此文件名下拉列表中再找unusedVariable
關(guān)鍵字奴璃。3.找到對(duì)應(yīng)警告后,點(diǎn)擊對(duì)應(yīng)警告瀏覽區(qū)右側(cè)展開(kāi)按鈕城豁,找到關(guān)鍵字
unusedVariable
苟穆,內(nèi)容太多請(qǐng)向下滾動(dòng)瀏覽,關(guān)鍵字一般都在內(nèi)容底部唱星,且會(huì)以特定底色標(biāo)記雳旅,標(biāo)記之后以[]
包含-W
開(kāi)頭的即為我們要找的命令
。反向定位??警告出處
右鍵
瀏覽區(qū)??警告項(xiàng)间聊,再點(diǎn)擊下拉菜單Show In Timeline
選項(xiàng)岭辣,進(jìn)入警告出處所在文件的預(yù)覽窗口(可以編輯),可以拖動(dòng)預(yù)覽窗口上邊界鋪滿瀏覽區(qū)甸饱,或者雙擊
瀏覽區(qū)??警告項(xiàng)打開(kāi)警告出處所在的文件并進(jìn)行編輯。
回顧
前文我們提到“<代碼區(qū)間>
這個(gè)代碼
可以是局部的,也可以是全局的叹话,即既可以在方法內(nèi)偷遗,也可以包含整個(gè)方法。”驼壶,所以我們可以這樣寫(xiě)
那么問(wèn)題來(lái)了氏豌,如果是組合??警告,代碼塊中出現(xiàn)多個(gè)不同類型的??热凹,此時(shí)應(yīng)該如何處理呢泵喘?????這里留給各位客官去思考、去探索般妙。
結(jié)尾
此處沒(méi)有精彩的結(jié)尾纪铺,但可以加個(gè)彩蛋。
想必各位客官瀏覽完上面的陳述和圖片后碟渺,肯定會(huì)對(duì)其中的一張圖片印象深刻鲜锚,甚至?xí)蟹N茅塞頓開(kāi)或者撥云見(jiàn)日的感覺(jué)。
<#哪張圖#>
沒(méi)錯(cuò)就是下面這張圖苫拍,名眼人想必也注意到了這塊區(qū)域的內(nèi)容芜繁,一定感覺(jué)似成相識(shí),我們文章開(kāi)頭就提到"其中"命令"
一般以-W
開(kāi)頭绒极,格式為"-W****"
,例如"-Wnonnull"
"骏令,所以圖中內(nèi)容各位客官可想而知,至于圖中出現(xiàn)的-f
垄提、-i
榔袋、-o
留給各位客官包括我自己去學(xué)習(xí)、去研究塔淤。
再結(jié)尾
以上內(nèi)容如有雷同摘昌,純屬巧合,如有錯(cuò)誤高蜂,歡迎指教聪黎。