变更记录
序号 | 录入时间 | 录入人 | 备注 |
---|---|---|---|
1 | 2016-09-19 | Alfred Jiang | - |
2 | 2017-04-09 | Alfred Jiang | 更新 CSDN - iOS编译过程的原理和应用 相关 |
方案名称
Xcode - 系统警告处理(清除和添加)
关键字
Xcode \ 添加警告 \ 清除警告 \ Warning
需求场景
- 消除系统中的编译警告
参考链接
- CocoaChina - 怎么去掉Xcode工程中的某种类型的警告
- 董铂然的博客 - iOS警告收录及科学快速的消除方法(推荐)
- CSDN - iOS编译过程的原理和应用(推荐)
- Which Clang Warning Is Generating This Message?
- NSHipster - attribute
- CSDN - 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 警告来提高代码质量相关知识,可以参考这里
效果图
(无)
备注
(无)