2012-03-02 89 views
1

在Objective-C中,将实例变量放入.h文件与将其放入.m文件之间的实际区别是什么?最终结果有何不同?什么特定的机制允许这个?在Objective-C中如何实现这一点,而不是在C++中?实现文件中的实例变量 - 私有与受保护

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

回答

2

在Clang/LLVM 2.0之前不可能在class extensions中添加其他实例变量。 Objective C编译器从头文件和类扩展中的定义中“装配”类的ivars,以达到最终的布局。

类扩展是Objective-C的一个相对较新的语言特性,所以它在其他语言中的缺失,例如C++,应该不会让人吃惊。而其他语言(如C#)可能会使用部分类实现可比较的功能。

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

相关问题