如何覆盖方法

时间:2014-02-16 23:48:56

标签: ios objective-c class oop inheritance

有一个类alpha,它有方法 - (void)doSomething。我还创建了一个类beta,可以根据需要进行修改。只能通过调用[gamma createAlpha]来创建alpha实例。

我需要的是让类beta继承alpha并覆盖doSomething,而我仍然需要通过调用[gamma createAlpha]来创建alpha实例。

有没有办法实现这个?

我希望我的问题有道理。 谢谢!

1 个答案:

答案 0 :(得分:0)

是。你可以使用方法调配。您需要使用以下代码创建类别:

@implementation alpha (newDoSomething)

// This is called when the category is being added
+ (void) load {
    Method method1 = class_getInstanceMethod(self, @selector(doSomething));
    Method method2 = class_getInstanceMethod(self, @selector(swizzleddoSomething));

    // this is what switches the two methods
    method_exchangeImplementations(method1, method2);
}

- (void)swizzleddoSomething
{
... your code
//You can call super implementation here with following line
//[self swizzleddoSomething];
}

@end

你仍然会有类alpha。它将由[gamma createAlpha]成功创建,但它将实现doSomething方法。