据我所知,Objective C是一种比C#或Java更具动态性的语言。在C#中,您只能知道调用者对象的类(使用stacktrace),而不知道调用者本身的实例引用。
Objective C对此更有能力吗?
更新:我在这里看了另一篇帖子How can I determine the "caller" of my method in Objective-C?。据我所知,它只给出了类名。我坚持认为我不仅仅对课程名称感兴趣,而是通过向来电者实例本身提供参考。
答案 0 :(得分:6)
这已经在这里得到了解答:
How can I determine the "caller" of my method in Objective-C?
但答案并不是特别漂亮。看起来没有简单,可靠的方法来执行它,除了搜索堆栈,这可能是操作系统版本或平台依赖。
为什么你想要这样做?也许你的问题还有另一个解决方案。
答案 1 :(得分:5)
据我所知,你甚至无法得到来电者的班级。 Objective-C中的所有方法调用都通过objc_msgSend()
路由,它将接收器,选择器和方法的参数作为参数。
接收方将是self
和选择器_cmd
。调用者不参与方法调用。您只能返回堆栈跟踪以了解方法的调用位置。
答案 2 :(得分:3)
我认为这可能是一个开始:NSLog(@"%@", [NSThread callStackSymbols]);
。
虽然,我认为你需要先看到这个帖子: How to find out who called a method?