Ana*_*att 2 oop xcode objective-c selector ios
我有一个非常简单的例子,但我无法理解如何获得有关调用其中的选择器的方法的信息.例如:
-(void)methodOne {
[self performSelector:@selector(methodTwo:)];
}
-(void)methodTwo:(id)sender {
//How to know which method performed selector???
}
Run Code Online (Sandbox Code Playgroud)
我认为这个例子非常简单,我只需要理解这一点,问题是,我怎么能从methodTwo中知道:哪个方法执行选择器,所以我从哪个方法调用methodTwo : .
提前致谢!
如果你想知道哪个方法调用你的methodTwo,你可以查看调用堆栈.看这个 ...
-(void)methodOne {
[self performSelector:@selector(methodTwo:)];
}
-(void)methodTwo:(id)sender {
NSLog( @"%@", [NSThread callStackSymbols][1]);
NSLog( @"%@", [NSThread callStackSymbols][2]);
}
Run Code Online (Sandbox Code Playgroud)
...而日志输出(简化)是......
0x014ef671 -[NSObject performSelector:] + 62
0x00002307 -[CMAppDelegate methodOne] + 55
Run Code Online (Sandbox Code Playgroud)
... callStackSymbols返回NSArray调用堆栈符号,因此,您可以查看索引1以获取您调用方法的方法.正如你所看到的,是NSObject的performSelector,它是因为你所谓的methodTwo通过performSelector.如果你这样改变你methodOne...
-(void)methodOne {
[self methodTwo:nil];
}
Run Code Online (Sandbox Code Playgroud)
...输出是......
0x000022fe -[CMAppDelegate methodOne] + 62
0x000025d6 -[CMAppDelegate application:didFinishLaunchingWithOptions:] + 374
Run Code Online (Sandbox Code Playgroud)
... 而已.你的问题得到了回答,但我不知道你为什么要这样做.您可能不想知道哪种方法确切地调用了您的方法,但是哪个对象启动了此调用链.一个例子是按钮 - 你可以有一个方法来处理更多的按钮,并且有一个sender参数来区分这些按钮,正如@stavash指出的那样.
| 归档时间: |
|
| 查看次数: |
1485 次 |
| 最近记录: |