我有一个非常简单的示例,但我无法理解如何获取有关在其中调用选择器的方法的信息。例如:
-(void)methodOne {
[self performSelector:@selector(methodTwo:)];
}
-(void)methodTwo:(id)sender {
//How to know which method performed selector???
}
我觉得这个例子很简单,我只需要理解这一点,再一次,问题是,我怎么知道 methodTwo: 哪个方法执行选择器,所以我从哪个方法调用 < strong>方法二:.
提前致谢!
最佳答案
如果您想知道哪个方法调用了您的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
的 performSelector
,这是因为您通过 performSelector
调用了 methodTwo
。如果您以这种方式更改您的 methodOne
...
-(void)methodOne {
[self methodTwo:nil];
}
...输出是...
0x000022fe -[CMAppDelegate methodOne] + 62
0x000025d6 -[CMAppDelegate application:didFinishLaunchingWithOptions:] + 374
...就是这样。您的问题已得到解答,但我不知道您为什么要这个。您可能不想知道究竟是哪个方法调用了您的方法,而是哪个对象启动了这个调用链。一个例子是按钮 - 您可以使用一种方法来处理更多按钮,并且有 sender
参数来区分这些按钮,正如@stavash 指出的那样。
关于objective-c - 如何知道在 Objective-C 中哪个方法执行了选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11590725/