有一个类alpha,它有方法 - (void)doSomething。我还创建了一个类beta,可以根据需要进行修改。只能通过调用[gamma createAlpha]来创建alpha实例。
我需要的是让类beta继承alpha并覆盖doSomething,而我仍然需要通过调用[gamma createAlpha]来创建alpha实例。
有没有办法实现这个?
我希望我的问题有道理。 谢谢!
答案 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方法。