我想禁止一些方法。例如
+ (MPMusicPlayerController*)iPodMusicPlayer
所以我试着这样做:
@interface MPMusicPlayerController (Disallowed)
// do never this method cause issues #957 #632 #1463
// read #632 description to detail analysis why code should never use this method while
// applicationMusicPlayer is used
+ (MPMusicPlayerController*)iPodMusicPlayer __attribute__((unavailable));
+ (MPMusicPlayerController*)iPodMusicPlayer __attribute__((deprecated));
@end
但是下面编译的代码没有任何警告
MPMusicPlayerController * curPlayer = [MPMusicPlayerController iPodMusicPlayer];
有什么想法吗?
答案 0 :(得分:2)
编译时间解决方案:
一种方法,只需使用下一个代码:
#pragma GCC poison iPodMusicPlayer
我应该提到SDK61和SDK7不能'毒'选择器包含':' 导致llvm bug :(
另一种方式:#import <MediaPlayer/MediaPlayer.h> // import original methods at first
@interface MPMusicPlayerController (Disallowed)
+ (MPMusicPlayerController*)disallowedMethod_iPodMusicPlayer __attribute__((unavailable));
@end
#define iPodMusicPlayer disallowedMethod_iPodMusicPlayer
答案 1 :(得分:1)
我认为您可以在MPMusicPlayerController上创建一个类别,例如覆盖(MPMusicPlayerController + Override),然后覆盖iPodMusicPlayer类方法以返回nil。一定要#include MPMusicPlayerController + Override.h。
您可以在方法中添加警告标记,以提醒任何人不要使用它:
#warning Disabled method - do not use.
如果适合您,请告诉我。
达明