找出哪个类调用函数 - iOS,Objective C

时间:2012-06-20 20:09:13

标签: objective-c ios5

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

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

有人可以帮我这个吗?

2 个答案:

答案 0 :(得分:1)

使用访客模式

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

答案 1 :(得分: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 Class Reference

请注意,如果您希望您的功能根据呼叫者的不同而有所不同,请勿执行此操作。它很脆弱(无法保证callStackSymbols返回的格式是否会发生变化)。

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