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

use*_*291 7 reflection objective-c ios

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

Objective C对此更有能力吗?

更新:我在这里查看了另一篇文章如何在Objective-C中确定我的方法的"调用者"?.据我所知,它只给出了类名.我坚持认为我只对类名不感兴趣,而是通过获取调用者实例本身的引用.

Nic*_*ood 6

这已在这里得到解答:

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

答案并不是特别漂亮.看起来没有简单,可靠的方法来执行它,除了搜索堆栈,这可能是操作系统版本或平台依赖.

你为什么要这么做?也许你的问题有另一个解决方案.


Fab*_*ser 5

据我所知,你甚至无法得到来电者的班级.Objective-C中的所有方法调用都被路由objc_msgSend(),它将接收器,选择器和方法的参数作为参数.

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