自动将所有类方法转换为公共方法的方法

时间:2015-11-09 14:44:24

标签: objective-c xcode

我必须修改一个相当广泛的类,以便我可以在继承链中使用它,所以作为第一步,我必须将所有函数名称迁移到接口,以便它们可用于继承。有没有比手动浏览我的.m文件并逐个复制每个名称更好的方法呢?

1 个答案:

答案 0 :(得分:1)

你可能应该重新设计你的类层次结构。

但是,我会问,子类化是否合适?您的子类是否符合子类的要求,特别是Liskov's Substitution Principle

然而,ObjC并不要求提前知道多态性的方法,以及" private"的唯一概念。方法是暴露于头文件。

那就是说,如果我被迫做你提出的建议,我会用一些拟实现的方法创建一个协议。

@protocol MyAPI
- (void)foo;
- (void)bar:(id)bar withBlarg:(id)blarg;
@end

然后,您可以拥有任何您喜欢的类声明符合该协议。

@interface SomeClass : NSObject<MyAPI>
@end

然后,如果该类已经实现了所需的方法,则无需执行任何操作。否则,实现类中的方法,以使它们与协议API正确匹配。

现在,让我们假设您有一些方法希望接收符合MyAPI协议的对象。

- (void)something:(id<MyAPI>)object {
    [object foo];
    [object bar:self.bar withBlarg:self.blarg];
}

这意味着任何对象只要符合协议就可以传递给something,并且不需要任何形式的继承。

此外,ObjectiveC不支持多重继承,但您可以根据需要使用尽可能多的协议。