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

据我所知目标C是比C#或Java更dynamic的语言。 在C#中,只能知道调用者对象的类(使用堆栈跟踪),而不知道调用者本身的实例引用。

Objective C更适合这个吗?

更新:我看了这里的另一篇文章如何确定我的方法在Objective-C中的“调用者”? 。 据我了解,只有类名。 我坚持认为我不只是通过类名感兴趣,而是通过获取调用者实例本身。

这已经在这里回答了:

我如何确定在Objective-C中我的方法的“调用者”?

答案并不特别漂亮。 看起来没有简单,可靠的方法来做到这一点,而不是通过堆栈,这可能是操作系统版本或平台依赖。

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

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

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

我认为这可能是一个开始: NSLog(@"%@", [NSThread callStackSymbols]);

虽然,我认为你需要首先看到这个线程: 如何找出谁叫一个方法?

另外NSThread文档 🙂