在xcode中,我可以使用图片中的按钮找到给定方法的调用者。
是否可以在运行时进行?
类似的东西:
-(NSArray *)getCallersOfFoo {
// is it possible to find the callers of the method foo?
}
-(void)foo {...}
答案 0 :(得分:1)
不完全是答案,但可能有所帮助。此方法将为您提供打印输出堆栈或调用区域中的调用方。您可以根据需要修改它们。
代码有点“被盗”,但我没有提到哪里。
#define SHOW_STACK NSLog(@"%@",[NSThread callStackSymbols])
#define SHOW_CALLER \
do { \
NSArray *syms = [NSThread callStackSymbols]; \
if ([syms count] > 1) { \
NSLog(@"<%@ %p> %@ - caller: %@ ", [self class], self, NSStringFromSelector(_cmd),[syms objectAtIndex:1]); \
} else { \
NSLog(@"<%@ %p> %@", [self class], self, NSStringFromSelector(_cmd)); \
} \
} while(0)
编辑:你可能想要这样的东西:
NSString *caller = nil;
NSArray *syms = [NSThread callStackSymbols];
if (syms.count > 1)
{
caller = syms[1];
}
if (caller.length)
{
NSLog(@"%s called by %@",
__PRETTY_FUNCTION__,
caller);
}
您可能会发现another Q&A here on SO非常有用。
答案 1 :(得分:0)
答案简短:不。
答案很长:好吧,你可以搞乱调用堆栈,然后付出更多的努力来利用你得到的东西。但它很可能不是你正在寻找的东西。
通常,该方法不应该关注它的调用方式。