我一直在网上进行一些研究,发现使用Objective C中的ObjectiveC
包你可以使用class_copyMethodList()
得到一个类的所有方法的列表,我看到你可以得到使用IMP
的方法的实现(instanceMethodForSelector:
)。到目前为止,Apple文档here一直很有帮助,但我已经陷入困境,不确定我真正想要找到的内容。
我想要一个在给定方法的实现中调用的方法/函数的列表,这样我就可以构建一个调用树。
有什么建议吗?提前谢谢!
答案 0 :(得分:0)
这个解决方案很难,并且会在每个方法中产生一行代码你也可以使用sqlite并保存跟踪的方法..
MethodTracker.h
@interface MethodTracker : NSObject
@property (nonatomic) NSMutableArray *methodTrackArr;
+ (MethodTracker *)sharedVariables;
@end
MethodTracker.m
@implementation MethodTracker
static id _instance = nil;
+ (MethodTracker *)sharedVariables
{
if (!_instance)
_instance = [[super allocWithZone:nil] init];
return _instance;
}
// optional
- (void)addMethod:(NSString *)stringedMethod
{
// or maybe filter by: -containObject to avoid reoccurance
[self.methodTrackArr addObject:stringedMethod];
NSLog("current called methods: %@", methodTrackArr);
}
@end
并使用它:
OtherClass.m
- (void)voidDidLoad
{
[super viewDidLoad];
[[MethodTracker sharedVariables] addMethod:[NSString stringWithUTF8String:__FUNCTION__]];
// or directly
[[MethodTracker sharedVariables].methodTrackArr addObject:[NSString stringWithUTF8String:__FUNCTION__]];
}
- (void)someOtherMethod
{
// and you need to add this in every method you have (-_-)..
[[MethodTracker sharedVariables] addMethod:[NSString stringWithUTF8String:__FUNCTION__]];
}
我建议您在MethodTracker.h
文件中导入[ProjectName]-Prefix.pch
。
抱歉,对于双重答案,我删除了另一个,我不知道这是怎么发生的..
希望这对你有所帮助或至少给了你一个想法..快乐的编码, 干杯!的
答案 1 :(得分:0)
我认为在运行时跟踪method
是可能的,但function
没有。
我已经构建了一个工具DaiMethodTracing,用于跟踪我所需要的单个类中的所有方法活动。这是基于Objective-c方法的混合。所以,有一个想法是这样做的
最后,您可能会获得method
通话路径。