我想在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]);
}
非常感谢!
答案 0 :(得分:1)
在这种情况下,您无需执行任何操作。如果您不提供实现,那么将使用超类的实现。
在编辑问题后编辑
如果您将日志语句放在超类的实现中,那么使用您自己的初始化程序执行的操作无关紧要。
为什么?
Cocoa中的众多惯例之一是每个类都有一个指定的初始化程序。所有其他指定的初始化程序然后调用此初始化程序。当你对类进行子类化时,则为新类创建一个新的指定初始化器,并作为初始化的一部分 - 这将调用超类的指定初始化器。
这就是为什么你看到NSObject子类初始化程序调用[super init]的原因,因为NSObject的指定初始化程序是init。
因此,只需在类的指定初始化程序中调用您的日志记录方法,只要遵循上述约定,此初始化程序将始终由子类调用,因此将始终调用您的日志记录方法。