有时框架对象将帮助器类接口放在* .m文件中,例如:
Foo.m:
@interface HelperObject : NSObject
/*...*/
@end
@implementation HelperObject
/*...*/
@end
@implementation Foo
/*...*/
@end
如果我想扩展Foo,例如使用类别,是否有办法扩展HelperObject?更一般地说,这样做是否违反了封装?我是否应该尝试扩展类功能而不扩展HelperObject?
答案 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
- 经常,他们甚至不知道它存在。所以不,将它继承在另一个文件中是不安全或有效的。