Xcode覆盖所有方法

时间:2012-11-01 17:33:26

标签: xcode

我想在xcode上自动覆盖子类的所有方法,例如我有一个UiViewControler的类扩展,我如何在xcode上覆盖UiViewController的所有方法或多或少:

- (id) init
{
    return [super init];
}

我的意图是记录所有方法以查看它们何时被调用,然后我的方法会或多或少

- (id) init
{
    [self log];
    return [super init];
}

其中log如下:

-(void) log
{
    NSLog(@"%@",[(NSString *) (NSArray *) [NSThread callStackSymbols][1] componentsSeparatedByString:@"-["][1]);
}

非常感谢!

1 个答案:

答案 0 :(得分:1)

在这种情况下,您无需执行任何操作。如果您不提供实现,那么将使用超类的实现。

在编辑问题后编辑

如果您将日志语句放在超类的实现中,那么使用您自己的初始化程序执行的操作无关紧要。

为什么?

Cocoa中的众多惯例之一是每个类都有一个指定的初始化程序。所有其他指定的初始化程序然后调用此初始化程序。当你对类进行子类化时,则为新类创建一个新的指定初始化器,并作为初始化的一部分 - 这将调用超类的指定初始化器。

这就是为什么你看到NSObject子类初始化程序调用[super init]的原因,因为NSObject的指定初始化程序是init。

因此,只需在类的指定初始化程序中调用您的日志记录方法,只要遵循上述约定,此初始化程序将始终由子类调用,因此将始终调用您的日志记录方法。