2012-02-10 48 views
1

我想禁止一些方法。例如有沒有一種簡單的方法來禁止框架中的某種方法?

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

我很難想象這種情況下,這將是適當的解決方案的問題。 – UIAdam 2012-02-10 04:11:36

回答

2

編譯時的解決方案:

一種方法,只需要使用下面的代碼:

#pragma GCC poison iPodMusicPlayer 

我應該提到SDK61和SDK7不能 '毒藥' 選擇含有 ':' 導致llvm bug :(

另一種方式:

1

我想你可以在MPMusicPlayerController上創建一個類別,例如,覆蓋(MPMusicPlayerController + Override),然後覆蓋iPodMusicPlayer類的方法返回nil。一定要#include MPMusicPlayerController + Override.h。

您可以添加警告標誌,以你的方法,提醒人不要使用它:

#warning Disabled method - do not use. 

請讓我知道這是否爲你的作品。

達明

+0

謝謝。該方法是運行時解決方案。但編譯時解決方案是preffer。 – Speakus 2012-02-10 04:34:20

相關問題