2011-07-06 47 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文件中。