有人可以向我解释一下 Objective C 中类别和继承之间的区别吗?我读了维基百科中的条目那里关于类别的讨论看起来与继承的讨论没有任何不同。我也看了《开放iPhone开发》一书中关于该主题的讨论,仍然不明白。
有时,继承似乎比它的价值更麻烦。当您想要向现有类添加一些内容以更改该类的行为时,可以正确使用它。
对于类别,您只希望现有对象多做一点事情。如前所述,如果您只想拥有一个处理压缩的字符串类,则不需要对该字符串类进行子类化,只需创建一个处理压缩的类别即可。这样,您不需要更改已使用的字符串类的类型。
线索是类别仅添加方法的限制,您不能使用类别向类添加变量。如果该类需要更多属性,则必须对其进行子类化。(编辑:我相信您可以使用关联存储)。
类别是添加功能的好方法,同时符合面向对象的原则,优先选择组合而不是继承。
2012年1月编辑
现在情况已经改变了。使用当前的 LLVM 编译器和现代的 64 位运行时,您可以向类添加 iVar 和属性扩展(不是类别)。这可以让您将私有 iVar 排除在公共接口之外。但是,如果您声明 iVar 的属性,它们仍然可以通过 KVC 访问/更改,因为 Objective-C 中仍然没有私有方法这样的东西。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)