关于Xcode警告
大多数警告(⚠️warning)其实不一定影响项目功能,但是警告太多容易隐藏一些真正需要解决的问题,而且考虑有些朋友的强迫症,Xcode的警告都是可以关闭的,出了直接的setting里治标不治本的设置外,更应该根据编译器的提示去真正解决它,这样的过程对更了解编译器也是有些帮助的。
NS_DEPRECATED_IOS
Implementing deprecated method.png
如图所示的警告其实挺常见的,特别是一些第三方库中,库的开发者因为一些原因会修改Api(其实iOS的工程师也经常干这事)。但是老的Api不能一下子干掉,毕竟线上有人再用,总得有个平稳过渡吧,所以就好存在一段时间存在新旧两个Api。这样等使用SDK的人都切换到新的,再把旧的Api干掉,对用户没有损失,也达到了目的。
但是怎么样告诉用户这个Api变了呢,测试不提bug开发哪有那么自觉呢,更何况谁也不会天天看文档啊。所以就有个这个宏,如下边这个方法的声明,注意黑体的部分,这样编译器就会给出警告,告诉你赶紧换吧,旧的方法是废弃的了。长时间使用废弃的方法是危险的,因为说不定哪天这个方法就找不到了,你就惨了。
- - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration NS_DEPRECATED_IOS(3_0,8_0, "Implement viewWillTransitionToSize:withTransitionCoordinator: instead") __TVOS_PROHIBITED;
#pragma clang diagnostic push
但是有时候很多代码不是自己写的,按照建议替换新的代价比较大,而且万一改错了呢,岂不是更冤。所以可以通过#pragma 处理警告 clang diagnostic 的使用处理这个问题。
这篇博客写作时间有点早,它里面提到的那个链接我看到时已经打不开了(也可能是未使用科学上网的问题,不求证)。这里提到两个方法
// A
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
DFUServiceController *controller = [initiator start];
#pragma clang diagnostic pop
// B
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-implementations"
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[self willInterfaceOrientionChange];
if (toInterfaceOrientation >= 3) {
_cropRect = _cropRectLandscape;
} else {
_cropRect = _cropRectPortrait;
}
}
#pragma clang diagnostic pop
-Wdeprecated-declarations可以消除使用了不建议的Api的警告,-Wdeprecated-implementations处理实现了废弃的方法,也就是我遇到的情况。
因为fuckclangwarning无法打开了,所以我花了不少时间在这里找到需要的关键字,最后在项目搜索时发现项目里一些第三方库竟然用到过?,浪费了好久,记在这里,希望帮大家节省些时间。
作者:原鸣清
链接:https://www.jianshu.com/p/711a85e4340b
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。