我遇到了一个奇怪的情况。我在函数中有一些局部变量:
JSContext *cx = ...;
jsval successCb = ...;
有一个函数调用接受这些参数:
//JS_RemoveValueRoot(JSContext *cx, jsval *vp);
JS_RemoveValueRoot(cx, &successCb); //works
上面编译得很好。但是,如果我有以下内容,则会收到编译时错误:
id foo = ^() {
JS_RemoveValueRoot(cx, &successCb);
}
从字面上看,如果我复制并粘贴该行,如果它在它编译的块之外,但如果不是,它不会。错误是:
No matching function for call to 'JS_RemoveValueRoot'
我怀疑在如何实现块闭包方面幕后发生了一些事情,但我对 Objective C 不够熟悉,无法弄清楚这一点。为什么这会产生编译时错误,我该如何解决?
编辑:似乎如果我执行以下操作,我不再收到编译时错误,但这对我来说毫无意义,这总是一件坏事,所以我仍然想要一个解释......
id foo = ^() {
jsval localSuccessCb = successCb;
JS_RemoveValueRoot(cx, &localSuccessCb);
};