实现文件中的实例变量 - 私有与受保护

时间:2012-03-02 16:32:49

标签: c++ objective-c

在Objective-C中,将实例变量放入.h文件与将其放入.m文件之间的实际区别是什么?最终结果有何不同?什么特殊的机制允许这个?为什么在Objective-C中这是可能的,而不是在C ++中?

如果我采用在.m文件中放置实例变量的方式,这只适用于私有实例变量,对吧?我应该总是将我的受保护实例变量放在.h文件中,以便它们可以被子类正确继承,对吧?或者有没有办法让.m文件中的受保护的ivars以某种方式继承?

1 个答案:

答案 0 :(得分:2)

在Clang / LLVM 2.0之前,无法在class extensions中添加其他实例变量。 Objective C编译器从头部和类扩展中的定义“汇编”类的ivars,到达最终布局。

类扩展是Objective-C的一个相对较新的语言特性,因此它在其他语言中的缺失,例如C ++,应该不足为奇。然而,其他语言,例如C#,可以实现与部分类相似的特征。

第二部分是正确的:只有私有实例变量和属性适合在类扩展中使用;受保护的,当然公共实例变量应该在.h文件中。