工程中代码警告的处理

⬅️ Back

常见警告

名称 含义
-Wunused-variable 声明变量未使用
-Wincomplete-implementation 方法定义未实现
-Wundeclared-selector 未声明的选择器
-Wformat 参数格式不匹配
-Wdeprecated-declarations 废弃的方法
-Wunreachable-code 不会执行的代码

NOTE:忽略某类警告时在警告名称间加 no- 即可,形如:-Wno-unused-variable

如何获得要忽略的警告类型?

在 Xcode Issue navigator 栏可以选中某个警告,右键选中”Reveal in Log“后即可查看警告所属类型。

常见的警告添加方法:

#warning This is a warning info

- (void)addTapAction:(SEL)tapAction target:(id)target NS_DEPRECATED_IOS(2_0, 4_0);

/**
*	__deprecated
*	__deprecated_msg(_msg)
*/
- (void)addTapAction:(SEL)tapAction target:(id)target __deprecated_msg("接口废弃");

// 方法不可用
+ (instancetype)new NS_UNAVAILABLE;
- (instancetype)init NS_UNAVAILABLE;

警告的处理

按照忽略层级可以分为三大类:代码忽略、文件忽略、工程忽略。

代码忽略

通过特定的宏包裹代码,告诉编译器某部分代码需要忽略警告。

// 对当前编译环境进行压栈
#pragma clang diagnostic push
// 忽略"对应预编译指令"警告,编译代码
#pragma clang diagnostic ignored "WarningType"
// 对编译环境进行出栈
#pragma clang diagnostic pop

文件忽略

在 XCode Building Phases 中的 Compile Source 选项中找到需要忽略警告的文件,然后在 Compiler Flags 一栏

中添加忽略类型。

工程忽略

普通工程

手动修改 XCode Building Setting 配置文件:

xcode_other_warning_flags

Pod 工程

在 PodFile 中消除警告:

# 忽略所有第三库的警告
inhibit_all_warnings!

# 忽略某个库的警告
pod 'SDWebImage', '~> 4.3.2', :inhibit_warnings => true

在 PodSpec 文件中修改工程配置:

s.pod_target_xcconfig = { 'WARNING_CFLAGS' => '-Wno-strict-prototypes' }

可以使用编辑器打开 xcodeproj 查找对应选项的 Key。

Refs:


⬅️ Back

⬆️ 回到顶部 ⬆️