1

有时框架对象将辅助类接口放在 *.m 文件中,例如:

Foo.m:

@interface HelperObject : NSObject
/*...*/
@end
@implementation HelperObject
/*...*/
@end

@implementation Foo
/*...*/
@end

如果我想扩展 Foo,例如使用类别,有没有办法扩展 HelperObject?更一般地说,这样做是否违反封装?我应该尝试在不扩展 HelperObject 的情况下扩展类功能吗?

4

3 回答 3

1

来电者对此一无所知Foo——通常,他们甚至不知道它的存在。所以不,在另一个文件中子类化它是不安全或无效的。HelperObject

于 2011-06-12T23:51:38.663 回答
1

您可以使用类别扩展 Helper 或 Foo ,但不能使用单个类别扩展两者。鉴于 Helper 和 Foo 之间的关系(其中 Helper 实际上是一个不可见的助手类),我认为允许这样做没有多大价值。

一般来说,Objective-C 不支持类或类别的多重继承。

但是,它确实支持通过协议对接口进行多重继承。

也就是说,您可以在.m文件中声明 Helper 和 Foo 都实现的协议。

于 2011-06-13T00:40:04.990 回答
0

Objective C 不允许嵌套类(例如与 Java 或 C++ 不同)。您可以使用聚合来扩展类功能。如果你想隐藏一些东西,你可以使用 Pimpl idiom,但是在 ObjC 中它不是必需的,因为你可以很容易地用类别替换它。

编辑:如果要使用类别扩展 HelperObject 对象,则应在要使用该函数的同一文件中声明它(以便它们可见)。

于 2011-06-12T23:51:30.737 回答