在重構(gòu)的時(shí)候,有時(shí)候會(huì)因?yàn)橛辛艘粋€(gè)更好的類而想要標(biāo)記某個(gè)類為已廢棄.這時(shí)候就需要用到__attribute__
以及deprecated(something)
關(guān)鍵字了,這樣做了之后,如果有人繼續(xù)使用已廢棄的類編譯器就會(huì)發(fā)出警告.
那么如何讓發(fā)出的警告像蘋果原生的那樣提示呢?
XQ_CLASS_DEPRECATED_APP(2_0_0, 3_0_0, "請使用XQMyViewController")
@interface ViewController : UIViewController
- (void)myPrint __attribute__((deprecated("請使用 -xxPrint")));
@end
效果如下:
在使用已廢棄的類時(shí),提示器會(huì)顯示該類已廢棄:
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 動(dòng)漫日語 app version "__VA_ARGS__""))) __attribute__((weak_import))
#endif
如果覺得上面的太麻煩,也可以使用下面的簡化版:
#define XQ_CLASS_DEPRECATED_APP(versionIntro, versionDep, descriptionDep, ...) __attribute__((deprecated("first deprecated in 動(dòng)漫日語 "#versionDep","#descriptionDep","#__VA_ARGS__""))) __attribute__((weak_import))
XQ_CLASS_DEPRECATED_APP(2.0.0, 3.0.0, "請使用UIMyViewController")
使用后可以達(dá)到相同的效果: