有没有一种好的/最好的方法来扩展Objective-C中的嵌套类?

时间:2011-06-12 23:26:44

标签: iphone objective-c cocoa-touch cocoa cocoa-design-patterns

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

Foo.m:

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

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

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

3 个答案:

答案 0 :(得分:1)

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

通常,Objective-C不支持类或类别的多重继承。

但是,它确实通过协议支持多种接口继承。

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

答案 1 :(得分:0)

Objective C不允许嵌套类(例如,与Java或C ++不同)。 您可以使用聚合来扩展类功能。如果你想隐藏某些东西,你可以使用Pimpl习语,但是在ObjC中没有必要,因为你可以轻松地用类别替换它。

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

答案 2 :(得分:0)

Foo的来电者知道没有关于HelperObject - 经常,他们甚至不知道它存在。所以不,将它继承在另一个文件中是不安全或有效的。