我正在围绕 Cocoa Scripting 编写自己的非 ObjC 框架(想想用 C、C++ 或 Java 编写一个可编写脚本的 Mac 应用程序,或者在我的例子中是 Xojo)。
我希望能够拦截任何对象优先的方法调用,而不必将实际方法添加到 ObjC 类(我不能,因为框架不知道应用程序代码可以提前处理哪些消息 - 所以它'相反,一旦命令消息从脚本引擎进入,则必须接收并传递它们)。
例如,任何属性的 getter 和 setter 都可以通过实现来拦截
-valueForUndefinedKey:
-setValue:forUndefinedKey:
以及NSScriptKeyValueCoding
协议的所有方法。
我正在寻找一种类似的方法来拦截NSCommandScript
发送到这些 sdef 元素中指定的方法的消息:
<responds-to command="reload">
<cocoa method="reloadList:"/>
</responds-to>
因此,reloadList:
与其通过将其添加到类方法中来实现,我想知道是否有一种通用的方法来捕获所有此类调用。
我发现类方法
+ (BOOL)resolveInstanceMethod:(SEL)sel
被调用要求reloadList:
. 但是同样的方法也被用于许多其他目的,所以我宁愿不要盲目地拦截每一个这样的调用,因为如果我将它们全部转发给一个告诉我它是否想要的 Java 函数,它会导致相当严重的性能损失例如,处理它。
我希望有一些东西可以让我在进一步转发之前告诉我这个选择器与 NSScriptCommand 相关。