在开发(重构)中会遇到需要更新、替换、方法的时候,这时候就需要deprecated标签来表明已经废弃的方法。
举例说明:
重构某API Client的时候发现一个不太符合命名规范的函数名:
+(APIClient *)sharedAPIClient;
这个函数并不是创建singleton,而只是每次通过类方法来创建一个新的,所以不该用这个名字,但是当前项目中很多地方会用到这个方法,而且协作开发,其他contributor在重构了这个地方之后可能还会使用原方法名,所以这时使用deprecated标记:
+(APIClient *)sharedAPIClient __deprecated;
+(APIClient *)newHttpClient;
这样如果后续有人使用了原来的方法,会得到一个deprecated的warning。
只举例说明:(代码来自MWPhotoBrowser
// Status Bar
if ([UIApplication instancesRespondToSelector:@selector(setStatusBarHidden:withAnimation:)]) {
[[UIApplication sharedApplication] setStatusBarHidden:hidden withAnimation:animated?UIStatusBarAnimationFade:UIStatusBarAnimationNone];
} else {
[[UIApplication sharedApplication] setStatusBarHidden:hidden animated:animated];
}
明显为了支持3.2以前的版本,做了兼容性适配,但是因为setStatusBarHidden:animated:
方法已经deprecated,就有一个deprecated warning,但是明显开发者已经意识到这一点了并做了很好的控制,所以编译时不该显示这个warning来扰乱视线,相关解决办法如下:
// Status Bar
if ([UIApplication instancesRespondToSelector:@selector(setStatusBarHidden:withAnimation:)]) {
[[UIApplication sharedApplication] setStatusBarHidden:hidden withAnimation:animated?UIStatusBarAnimationFade:UIStatusBarAnimationNone];
} else {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
[[UIApplication sharedApplication] setStatusBarHidden:hidden animated:animated];`
#pragma clang diagnostic pop
}
启动了编译选项"-Wdeprecated-declarations",但是不是应用于整个project或target的,而只是需要特殊处理的几行代码。
(更多Clang相关参见Clang User Manual
例如:
__unused static NSString *kAppKey = @"qwertyuiop";
- (void)getSomeData __unused;
[self getSomethingSuccess:^(id value1, id __unused value2)]
- (void)getDataWithUid:(NSInteger)uid name:(NSString*)__unused name{...}
后续还会更新,如有错误或疏漏,欢迎指正和增加。