如果您确实想知道哪个方法调用了您的methodTwo
,可以查看调用堆栈。看这个 ...
-(void)methodOne {
[self performSelector:@selector(methodTwo:)];
}
-(void)methodTwo:(id)sender {
NSLog( @"%@", [NSThread callStackSymbols][1]);
NSLog( @"%@", [NSThread callStackSymbols][2]);
}
...并且日志输出(简化)是...
0x014ef671 -[NSObject performSelector:] + 62
0x00002307 -[CMAppDelegate methodOne] + 55
...callStackSymbols
返回NSArray
调用堆栈符号,因此,您可以查看索引 1 以获取您调用方法的方法。如您所见,有NSObject
'sperformSelector
是因为您调用了methodTwo
via performSelector
。如果你methodOne
以这种方式改变你的...
-(void)methodOne {
[self methodTwo:nil];
}
...输出是...
0x000022fe -[CMAppDelegate methodOne] + 62
0x000025d6 -[CMAppDelegate application:didFinishLaunchingWithOptions:] + 374
... 而已。你的问题得到了回答,但我不知道你为什么要这个。您可能不想知道究竟是哪个方法调用了您的方法,而是哪个对象启动了这个调用链。一个例子是按钮 - 您可以使用一种方法来处理更多按钮,并且sender
正如@stavash 指出的那样,可以区分这些按钮。