0

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

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

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

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

其中日志如下方法:

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

多谢!

4

1 回答 1

1

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

编辑问题后编辑

如果您将 log 语句放在超类的实现中,那么您使用自己的初始化程序做什么都没有关系。

为什么?

Cocoa 中的许多约定之一是每个类都有一个指定的初始化程序。然后所有其他指定的初始化程序调用此初始化程序。当您将类子类化时,您将为新类创建一个新的指定初始化程序,并作为初始化的一部分 - 这将调用超类的指定初始化程序。

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

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

于 2012-11-01T17:34:58.983 回答