扩展/类别而不是接口

时间:2012-06-03 01:31:53

标签: iphone objective-c ios objective-c-category

所以我注意到在我的新Xcode项目中,默认情况下我的.m文件中有一个类别。例如,我在.m文件中有这个:

@interface ViewController ()

@end

@implementation

   //Some code    

@end

我想知道在.m文件中的类别中声明我的变量和函数是否可以,或者我应该像以前一样在.h文件中这样做。基本上,关于类别的最佳实践是什么。

顺便说一句,我的问题与下面的链接有关,但该链接并不能完全回答我的问题。

1 个答案:

答案 0 :(得分:6)

这不是一个类别,它是class extension(注意空括号)。您可以在扩展中保留私有实现详细信息(包括私有ivars),以将.h文件中的声明限制为类的接口。请注意,您只能在扩展名中添加ivars,而不能在类别中添加。

这种方法的一个非常重要的结果是,如果您需要只需要实现的额外标头的类型的ivars,您可以避免在接口的标头中包含该标头,从而隐藏类的用户的实现依赖性。 / p>