自定义宏标记某个类为已废弃

在重构的时候,有时候会因为有了一个更好的类而想要标记某个类为已废弃.这时候就需要用到__attribute__以及deprecated(something)关键字了,这样做了之后,如果有人继续使用已废弃的类编译器就会发出警告.
那么如何让发出的警告像苹果原生的那样提示呢?

XQ_CLASS_DEPRECATED_APP(2_0_0, 3_0_0, "请使用XQMyViewController")
@interface ViewController : UIViewController

- (void)myPrint __attribute__((deprecated("请使用 -xxPrint")));

@end

效果如下:

自定义宏标记某个类为已废弃_第1张图片
969588ED-C749-4020-94AD-B37D0DA15DC0.png
3CCA139B-8E7D-4FD7-8754-70D1A16CEF89.png

在使用已废弃的类时,提示器会显示该类已废弃:


自定义宏标记某个类为已废弃_第2张图片
BE2AB73F-A44C-4963-893D-E1B6C54226E0.png

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")

使用后可以达到相同的效果:

自定义宏标记某个类为已废弃_第3张图片
83736C5E-1485-4BCC-A505-70D397BC8619.png

你可能感兴趣的:(自定义宏标记某个类为已废弃)