Objective C可以在运行时(反射)确定调用者对象引用吗?

时间:2012-01-28 14:37:19

标签: objective-c ios reflection

据我所知,Objective C是一种比C#或Java更具动态性的语言。在C#中,您只能知道调用者对象的类(使用stacktrace),而不知道调用者本身的实例引用。

Objective C对此更有能力吗?

更新:我在这里看了另一篇帖子How can I determine the "caller" of my method in Objective-C?。据我所知,它只给出了类名。我坚持认为我不仅仅对课程名称感兴趣,而是通过向来电者实例本身提供参考。

3 个答案:

答案 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?

另外NSThread Documentation:)

相关问题