Xcode 在 Command + B build項(xiàng)目時(shí),會(huì)對(duì)代碼進(jìn)行靜態(tài)分析檢查,可能會(huì)有些警告,有些警告是”無(wú)風(fēng)險(xiǎn)“的,如實(shí)例化未使用,方法過(guò)期等,有些警告預(yù)示著代碼存在運(yùn)行”風(fēng)險(xiǎn)“,如類型不匹配、方法未實(shí)現(xiàn)、selector中使用了不存在的方法名、循環(huán)引用、自定義的警告等。我們應(yīng)該對(duì)警告也要高度重視,通過(guò)正確處理,降低代碼運(yùn)行風(fēng)險(xiǎn)。還有些代碼潔癖者,可對(duì)”無(wú)風(fēng)險(xiǎn)“警告做些忽略處理,方便查找和處理”風(fēng)險(xiǎn)“性警告。
一、通過(guò) Xcode 配置全局性忽略警告
1、首先查看警告標(biāo)識(shí)
在 Xcode 中切換到警告列表,右擊某個(gè)警告,選擇 Reveal in Log(有時(shí)這個(gè)選項(xiàng)可能是置灰狀態(tài),不能選擇,可以嘗試編譯下項(xiàng)目,或者退出 Xcode 重新來(lái)一次)

下圖紅色框中,中括號(hào)內(nèi)部的就是警告標(biāo)識(shí)符(先要點(diǎn)擊右上角展開(kāi)警告才能看到這一大堆信息)

2、在 Build Settings 中項(xiàng)目全局忽略警告
在項(xiàng)目的 Build Settings 中也可以設(shè)置忽略某種或多種類型的警告,不過(guò)在這設(shè)置的影響范圍就是整個(gè)項(xiàng)目的了,要三思而后行,不然就是給自己挖坑。
填寫內(nèi)容的規(guī)則,僅僅是在第一種方法中找到的警告標(biāo)識(shí)符中的 W 字母后面加上 no- 就可以了。

Build Settings 中項(xiàng)目全局忽略警告
還是上面的例子,我們可以對(duì)整個(gè) Project 忽略警告,也可以僅限于某一個(gè) Target 單獨(dú)忽略警告,在 Build Settings 中找到 Custom Compiler Flags,雙擊 Other Warning Flags(可以配置 Debug 和 Release 環(huán)境),填入 -Wno-unused-variable 后,編譯項(xiàng)目,項(xiàng)目中所有的此類型警告都沒(méi)有了。
project → build Setting 搜索 other warning 添加 如下忽略規(guī)則
// 實(shí)例化,未使用
-Wno-unused-variable
// 過(guò)期方法
-Wno-deprecated-declarations
// self 警告
-Wno-implicit-retain-self
二、忽略 CocoaPods 第三方庫(kù)警告
通過(guò) CocoaPods 給項(xiàng)目導(dǎo)入了一些第三方庫(kù),這些庫(kù)里面或多或少會(huì)有些警告,想消除這些警告,很簡(jiǎn)單,只需在 Podfile 中加上這一句 inhibit_all_warnings!,通過(guò) CocoaPods 安裝的第三庫(kù)的警告就沒(méi)有了。
pod 'WCDB.swift', :inhibit_warnings => true
三、局部代碼處理
1、方法棄用警告
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
//code這里插入相關(guān)的代碼
#pragma clang diagnostic pop
2.不兼容指針類型
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
//code這里插入相關(guān)的代碼
#pragma clang diagnostic pop
3.retain cycle
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-retain-cycles"
//code這里插入相關(guān)的代碼
#pragma clang diagnostic pop
4.未使用變量
#pragma clang diagnostic push
#pragma clang diagnostic ignored "--Wunused-variable"
//code這里插入相關(guān)的代碼
#pragma clang diagnostic pop
5.selector中使用了不存在的方法名(在使用反射機(jī)制通過(guò)類名創(chuàng)建類對(duì)象的時(shí)候會(huì)需要的)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"
//code這里插入相關(guān)的代碼
#pragma clang diagnostic pop