源链接:https://viktyz.gitbooks.io/iosnotebook-gitbook/Notes/Note_00193_20160919.html
方案名称
Xcode - 系统警告处理(清除和添加)
关键字
Xcode \ 添加警告 \ 清除警告 \ Warning
需求场景
- 消除系统中的编译警告
参考链接
- CocoaChina - 怎么去掉Xcode工程中的某种类型的警告
- 董铂然的博客 - iOS警告收录及科学快速的消除方法(推荐)
- 优快云 - iOS编译过程的原理和应用(推荐)
- Which Clang Warning Is Generating This Message?
- NSHipster - attribute
- 优快云 - iOS 合理利用Clang警告来提高代码质量
详细内容
可以通过以下三种方式添加警告
1.使用 #warning TODO
在代码中添加逻辑相关警告 2.使用 NS_DEPRECATED_IOS
添加方法版本相关警告 3.使用 __attribtue__
编译器指令
//弃用API,用作API更新
#define __deprecated __attribute__((deprecated))
//带描述信息的弃用
#define __deprecated_msg(_msg) __attribute__((deprecated(_msg)))
//遇到__unavailable的变量/方法,编译器直接抛出Error
#define __unavailable __attribute__((unavailable))
//告诉编译器,即使这个变量/方法 没被使用,也不要抛出警告
#define __unused __attribute__((unused))
//和__unused相反
#define __used __attribute__((used))
//如果不使用方法的返回值,进行警告
#define __result_use_check __attribute__((__warn_unused_result__))
//OC方法在Swift中不可用
#define __swift_unavailable(_msg) __attribute__((__availability__(swift, unavailable, message=_msg)))
示例:
- (void)sampleWarningMethod __deprecated_msg("Unsafe method");
常见警告以及对应清除方法可以参考推荐链接
如果某警告实在无法清除,但是又不想让它显示,可以加入预编译指令
#pragma clang diagnostic push
#pragma clang diagnostic ignored "对应预编译指令"
//这里写出现警告的代码
#pragma clang diagnostic pop
这段代码的作用是
- 对当前编译环境进行压栈
- 忽略"对应预编译指令"警告
- 编译代码
- 对编译环境进行出栈
关于预编译指令的详细对应关系,可以参考这里
关于 iOS 合理利用 Clang 警告来提高代码质量相关知识,可以参考这里