在标题中声明私有实例变量与在实现中声明它之间有什么区别吗?
TestObj.h中的
@interface TestObj : NSObject
{
int test;
}
@end
vs TestObj.m
@interface TestObj()
{
int test;
}
@end
两者似乎都与我相同,在标题和实现中声明实例变量之间是否存在任何实际差异,如果不是首选?实现文件中的@interface
似乎只是一种声明私有属性的方式,除此之外还有其他任何用途吗?
答案 0 :(得分:15)
首选项通常是将私有实例变量和属性放在私有类扩展中(在.m中),并将公共接口文件(.h)保留为真正属于公共接口的属性和方法。
它有助于将实现细节与公共界面隔离开来,使一切更加清晰。它还确保外部类不会无意中更改此类的私有变量。
答案 1 :(得分:7)
Greg Parker对接受的答案的评论是最好的答案:
有一个功能差异:默认情况下,班级
@interface
中的ivars为@protected
,类扩展名@interface或@implementation
中的ivars为{{1}默认情况下。