【问题标题】:Get the object which called a method获取调用方法的对象
【发布时间】:2011-05-25 06:12:27
【问题描述】:

如果我在这样的随机类中接到电话:

@implementation SomeClass

- (void) classMethodFoo
{
    int a = [SomeSingleton sharedInstance].aValue;
}

@end

SomeSingleton sharedInstance 内部,有没有办法获得对调用此方法的对象的引用(当然没有被调用的 self 作为参数传递)?

【问题讨论】:

  • @DarkDust,不,这是完全不同的问题。这是关于调用者的特定实例。您的链接更多关于堆栈跟踪。
  • @Timur:在这两个问题中,都是关于“谁给我打电话”。您只能通过堆栈来回答这个问题,并且没有可靠的方法。

标签: objective-c objective-c-runtime


【解决方案1】:

不,关于调用者的信息不会自动传递。

这就是为什么IBAction 方法,例如,有一个sender 参数,以及为什么委托方法通常有一个引用委托对象的参数。

【讨论】:

  • 我想补充一点,虽然get the call stack 是可能的,但如果没有平台相关的堆栈遍历(据我所知),您将无法获取调用对象。
  • 另外,可能没有“对象”调用该方法。例如,可以从函数中调用该方法。
  • @Dark:感谢您的链接。我不确定是否有必要包含免责声明,即如果一个人愿意深入研究一个很可能不想深入研究的内部结构,这实际上是可能的。 :)
猜你喜欢
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多