obj-c类中的重载方法:如何将它传递给原始类?

时间:2011-12-09 09:34:30

标签: objective-c categories overloading

据我所知,在我的重载方法(类别中)中,我可以调用[super method]将其传递给原始类。 在我的情况下,我没有类的头文件,所以我写道:

@interface OriginalClass : NSObject
@end

@interface OriginalClass (overloadMethod)
-(void) method;
@end

@implementation OriginalClass (overloadMethod)
-(void) method
{
    // some my code
    [super method]; // here is warning that "NSObject may not respond to '-method'
}
@end

那么可以在没有头文件的情况下正确地将method传递给OriginalClass吗?也许最好看一下method_setImplementation

2 个答案:

答案 0 :(得分:2)

您正在添加类别,而不是子类。添加类别时,请将其视为将现有方法添加到现有类中。不是向super发送消息(在本例中为NSObject),而是将消息发送到self。想象一下,您正在为要添加类别的类实现。

我不确定你是否认为你是子类,或者你是否想要调侃......

答案 1 :(得分:1)

如果我没记错的话,文档中的ObjC编程简介提到,当您使用类别覆盖方法时,您将无法再访问原始方法。

您的问题与此处的问题完全相同:How do I call the original function from the overloaded function in a category?

请注意第一个答案中文档的引用