2011-07-06 105 views
5

我想確認此修復程序的實際工作,不會對我的代碼不利影響:採用從類別的協議

我創建了一個靜態庫與MyClass.h公開頭,其餘我的代碼全部隱藏。 MyClass採用在MyProtocol.h中定義的協議MyProtocol。我想隱藏MyProtocol.h,但由於MyClass.h是一個公共頭文件,如果我試圖將其隱藏爲項目頭文件,它將無法找到MyProtocol.h。我的解決辦法:

MyClass.h:

@interface MyClass : NSObject { 
    //instance variables 
} 
// methods 
@end 

MyClass.m:

#import "MyProtocol.h" 
@interface MyClass() <MyProtocol> 
@end 

@implementation MyClass 
// implementation 
@end 

我還沒有看到這樣的事情的其他實例正在做其他比這裏:Can a category simultaneously implement a protocol?,和問題/答案最終與原始問題無關。 所以我想確定這實際上是做它看起來像它,和/或看看是否有更好的方法來實現我想要做的事情。

+3

使用類別使類符合協議是合法的。 –

回答

6

你提出的建議是完全合法的,對你的問題是一個很好的解決方案。

有一個微妙的語義區別,可能會混淆你的谷歌搜索這個問題。通過在你的例子中使用空括號,你在技術上宣佈了一個「類擴展」,而不是「類別」。細微的區別在於編譯器需要在類擴展中聲明的方法在類的主@implementation塊中實現。相比之下,在一個命名類別中聲明的方法是在一個單獨的命名實現塊中實現的,通常在一個單獨的.m文件中。