我想在函数上运行简单的分析。当一个函数开始运行时,计时器会亮起。完成后,时间将打印到日志中:
-(int) myFunc {
[MyProfileService startTimer:@"myFuncTimer"];
... code ...
[MyProfileService stopTimer:@"myFuncTimer"];
return result;
}
此解决方案正在弄乱生产代码。更优雅的灵魂将是在类初始化方法中静态注册计时器:
@implementation MyClass {
+(void) initialize {
[MyProfileService monitorFunction:@Selector(myFunc) inClass[Myclass class]];
}
为了实现这个目标,我需要用新的实现替换myFunc的实现:
-(void) runProfileFunc(....) {
[MyProfileService startTimer:@"myFuncTimer"];
id result = [MyClass performSelector:@selector(myFunc) withObject: ...];
[MyProfileService stopTimer:@"myFuncTimer"];
return result;
}
使用objc / runtime我可以在运行时切换函数。 如何复制原始函数signiture并将参数传递给包装器中的原始函数?