这是我发布到stackoverflow的第一个,虽然我总是查看论坛。
我正在寻找一种方便的方法来了解谁在ObjC中发送了一条消息而没有将指针作为方法中的参数发送。
有人可以帮忙吗?
提前致谢!
答案 0 :(得分:3)
不,如果没有传递指向邮件发件人的指针,这是不可能的,如下所示:
- (void) someMethod:(id) sender {
}
[obj someMethod:self];
答案 1 :(得分:3)
在一般情况下这是不可能的(消息可以从没有自己的地方设置,例如运行时或主要功能),即使在技术上可行的情况下它也是不切实际的,因为它需要你走路堆栈并分析那里的字节。
实际上,除了操作方法之外,您在大多数情况下都不需要知道发件人。这通常是糟糕设计的标志。在任何情况下,当您需要获取对另一个对象的引用时,它应该作为参数传递给方法。
编辑:我偶然发现了这一点并发现了评论。如果有人想知道,它通常是设计糟糕的标志的原因是因为它在组件之间创建了几乎不需要的紧密耦合(再次,在动作方法之外)。通常,您可以使用委托或回调块来实现相同的目的。答案 2 :(得分:0)
我猜你可以使用底层hash
的{{1}}值(如果对象是NSObject
的子类)。作为NSObject
,它与指针的大小相同,因此不会节省太多空间。
为什么你不想使用指针?