是否有一种简单的方法可以禁止框架中的某些方法?

时间:2012-02-10 02:45:52

标签: objective-c ios methods deprecated

我想禁止一些方法。例如

+ (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];

有什么想法吗?

2 个答案:

答案 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.

如果适合您,请告诉我。

达明