问题1:
我有一个带有静态方法的Java类:
class Test {
static public void show (String value) {
// dosomething with value
}
}
如果我想从c++调用它:
jstring value = env->NewStringUTF("Hello, World");
// ExceptionCheck after NewStringUTF.
env->CallStaticVoidMethod(the_jclass, the_jmethodID, value);
// ExceptionCheck after CallStaticVoidMethod.
我应该在 NewStringUTF 之前放置 PushLocalFrame ,在之后放置 PopLocalFrame 来释放本地引用吗?
问题2:
我看到了 PopLocalFrame 的声明,它是:
jobject PopLocalFrame(JNIEnv *env, jobject result);
在阅读了jni文档之后,我仍然不明白为什么PopLocalFrame需要结果参数和返回值 。您能举一个例子说明它的存在值(value)吗?
最佳答案
在这种情况下,我看不到重点。您可以只使用DeleteLocalRef
删除本地引用,而不必创建新的本地引用框架。
假设您使用PushLocalFrame
创建了一个新的本地引用框架,并且想要删除在该框架上创建的所有本地引用,除了您要保留的一个引用(例如,您创建了一些要从函数返回的对象)。
您可以通过将要保留的引用传递给PopLocalFrame
来达到此目的,并且返回的值是先前本地引用框架(现在是当前引用框架)中对该对象的引用。