2012-01-28 49 views
7

据我所知目标C是比C#或Java更动态的语言。在C#中,您只能知道调用者对象的类(使用堆栈跟踪),但不知道调用者本身的实例引用。Objective C可以在运行时确定调用者对象引用(反射)吗?

Objective-C更适合这个吗?

更新:我看了这里的其他职位How can I determine the "caller" of my method in Objective-C?。据我了解,它只提供班级名称。我坚持认为我不只对班级名称感兴趣,而且对参与者实例本身也有兴趣。

+0

而不是重申你想要什么,请解释一下什么是你正在尝试做的。在Objective-C中获取被调用者实例可能是不可能的,但是您的更高级别的问题可能以不同的方式解决。 – 2012-01-29 01:02:38

回答

6

这一点已经在这里找到答案:

How can I determine the "caller" of my method in Objective-C?

答案不是特别漂亮,但。看起来没有一种简单可靠的方法可以做到,而不是通过堆栈查找,这可能是操作系统版本或平台相关的。

你为什么要这样做?也许还有另一个解决你的问题的方法。

+0

我看了另一篇文章。据我了解,它只提供班级名称。我只对类名感兴趣,但对实例本身不感兴趣。 – user310291 2012-01-28 16:32:46

+0

那么它可能是不可能的。正如其他人所说,Objective-C消息发送系统围绕objc_msgSend()函数进行,该函数采用被调用者和选择器参数,但不包含调用者。 – 2012-01-29 01:00:57

5

据我所知,你甚至无法获得调用者的类。 Objective-C中的所有方法调用都通过objc_msgSend()进行路由,它将接收器,选择器和方法的参数作为参数。

接收器将是self和选择器_cmd。调用者不参与方法调用。您只能返回堆栈跟踪以了解方法被调用的位置。

+0

只要我可以阅读,堆栈跟踪只给出类名不是实例参考http://tombarta.wordpress.com/2008/08/01/c-stack-traces-with-gcc/ – user310291 2012-01-28 16:35:57

相关问题