在重构的时候,有时候会因为有了一个更好的类而想要标记某个类为已废弃.这时候就需要用到__attribute__
以及deprecated(something)
关键字了,这样做了之后,如果有人继续使用已废弃的类编译器就会发出警告.
那么如何让发出的警告像苹果原生的那样提示呢?
XQ_CLASS_DEPRECATED_APP(2_0_0, 3_0_0, "请使用XQMyViewController")
@interface ViewController : UIViewController
- (void)myPrint __attribute__((deprecated("请使用 -xxPrint")));
@end
效果如下:
在使用已废弃的类时,提示器会显示该类已废弃:
XQ_CLASS_DEPRECATED_APP(2_0_0, 3_0_0, "请使用XQMyViewController")
声明如下:
#ifndef XQStateDeprecatedMacro_h
#define XQStateDeprecatedMacro_h
#define XQ_CLASS_DEPRECATED_APP(_appIntro, _appDep, ...) XQ_CLASS_DEPRECATED(_appIntro, _appDep, __VA_ARGS__)
#define XQ_CLASS_DEPRECATED(_appIntro, _appDep, ...) __attribute__((visibility("default"))) XQ_DEPRECATED(_appIntro, _appDep, __VA_ARGS__)
#define XQ_DEPRECATED(_appIntro, _appDep, ...) __XQ_AVAILABLE_BUT_DEPRECATED(__APP_##_appIntro, __APP_##_appDep, __VA_ARGS__)
#define __XQ_AVAILABLE_BUT_DEPRECATED(_appIntro, _appDep, ...) __XQAVAILABILITY_INTERNAL##_appIntro##_DEP##_appDep(__VA_ARGS__)
#define __XQAVAILABILITY_INTERNAL__APP_2_0_0_DEP__APP_3_0_0(...) __XQNB_AVAILABILITY_STARTING("3.0.0,"#__VA_ARGS__"")
#define __XQNB_AVAILABILITY_STARTING(...) __attribute__((deprecated("first deprecated in 动漫日语 app version "__VA_ARGS__""))) __attribute__((weak_import))
#endif
如果觉得上面的太麻烦,也可以使用下面的简化版:
#define XQ_CLASS_DEPRECATED_APP(versionIntro, versionDep, descriptionDep, ...) __attribute__((deprecated("first deprecated in 动漫日语 "#versionDep","#descriptionDep","#__VA_ARGS__""))) __attribute__((weak_import))
XQ_CLASS_DEPRECATED_APP(2.0.0, 3.0.0, "请使用UIMyViewController")
使用后可以达到相同的效果: