我希望在Cocoa中编写一个插件控制器来加载bundle,并为插件公开一组特定的方法来调用。
我的问题是:是否可以知道(任何)有关在控制器中调用方法的对象的信息。当一个实例化的插件在我的插件控制器中调用一个方法时,我想知道哪个插件实例调用了该方法,而不必依赖插件发送指向自身的指针作为参数(我总是可以验证它们发送的指针) ,但我希望尽可能简化API方法。
可能没有完美的解决方案(并且有简单的解决方法),但如果可能的话,学习一些新的技巧总是好的(或者为什么不可能的原因)。
提前致谢。
答案 0 :(得分:1)
如果不走堆栈就不可能,甚至可能不行。甚至没有保证从一个方法中发送给定的消息 - 即使它是,它可能不是你认为是“调用者”的方法。例如,假设您的插件可以访问Cocoa,您的控制器方法可以由NSTimer调用。
一般来说,这是不切实际的。实现此目的的常规方法是让对象自己传递。如果你出于安全原因试图这样做,那么无论如何你都需要一个更强大的解决方案,因为Cocoa的对象模型并没有考虑到这一点。对象太容易说谎是谁以及他们是什么。
答案 1 :(得分:0)
好吧,你可以抛出异常,抓住它并检查它的堆栈跟踪。
当然,假设Objective-C支持例外。
答案 2 :(得分:0)
发送对调用对象的引用通常是这样做的。作为替代方案,您可以让主机代码为插件提供代理对象以进行通信。在加载每个插件时,为每个插件创建一个新的代理对象。