0

我在 A 类中有一个函数 - myFunc()。还有多个其他类调用此函数。

我如何能够找出在特定实例中哪个类正在调用 myFunc()?

有人能帮我解决这个问题吗?

4

2 回答 2

1

使用访客模式

  1. 让每个调用类实现一个通用协议,该协议定义您希望实现的行为的接口。
  2. 将协议作为参数添加到 myFunc。
  3. 调用 myFunc() 时,将self指定为参数。
  4. myFunc 现在可以在不知道其他特定类的情况下调用任何协议方法。

这样您就可以遵循封装的概念。

于 2012-06-20T20:18:47.987 回答
1

从概念上讲,这些信息在堆栈中是可用的,但并不容易获得。大多数解决方案将涉及创建异常以捕获堆栈跟踪,然后读取跟踪。我还没有尝试过,但它可能会起作用:

void myFunc()
{
    NSArray *stack = [NSThread callStackSymbols];
    // I have no idea if the current function call is at the 0 or last position
    // of the array. Experiment here!
}

相关文档:NSThread 类参考

请注意,如果您希望您的函数根据调用者的不同而表现不同,请不要这样做。它很脆弱(不能保证返回的格式是否callStackSymbols会改变)。

最好将参数简单地传递给您的函数。如果您正在处理 C 函数回调 API,通常有一个void *“context”或“info”参数可用于传入任意指针。这可能是指向您的对象的指针。

于 2012-06-20T20:21:03.517 回答