12

在标头中声明私有实例变量与在实现中声明它有什么区别?

在 TestObj.h

@interface TestObj : NSObject
{
    int test;
}
@end

与 TestObj.m 中的对比

@interface TestObj()
{
    int test;
}
@end

两者似乎都等同于我,在标头中声明实例变量与在实现中声明实例变量之间是否有任何实际区别,如果不是,哪个是首选?实现文件内部@interface似乎只是声明私有属性的一种方式,除此之外它还有其他用途吗?

4

2 回答 2

15

首选通常是将私有实例变量和属性放在私有类扩展名中(在.m 中),并将公共接口文件(.h)留给那些真正属于公共接口的属性和方法。

它有助于将实现细节与公共接口隔离开来,并使一切变得更加干净。它还确保外部类不会无意中更改此类的私有变量。

请参阅类扩展扩展内部实现

于 2013-09-04T14:40:01.590 回答
7

Greg Parker 对已接受答案的评论是这里的最佳答案:

有一个功能差异:类中的 ivars@interface@protected默认情况下,类扩展 @interface 或 in@implementation@private的 ivars 是默认情况下。

于 2015-04-08T21:52:00.197 回答