我是否需要在使用NewIntArray创建的数组上调用ReleaseIntArrayElements?

时间:2012-05-11 14:32:58

标签: java java-native-interface

我有一个本地方法可以对位图进行一些操作。在方法内部,我通过方法调用获取图像数据,该方法调用将数据写入我使用jintArray创建的NewIntArray参数:

jintArray pixels = env->NewIntArray(width * height);

我不需要将此数组返回给调用的Java代码 - 它仅用于在此方法中进行处理。我是否需要在ReleaseIntArrayElements上致电pixels?如果是这样,我将为elems参数传递什么,因为我不需要将其复制回Java数组?

void (JNICALL *ReleaseIntArrayElements) (JNIEnv *env, jintArray array, jint *elems, jint mode);

2 个答案:

答案 0 :(得分:13)

您无需对其执行任何操作。它是一个本地引用,当您的JNI方法退出时它将被清除。正如爱德华汤普森暗示的那样,ReleaseIntArrayElements()GetIntArrayElements().相反。它没有其他功能。

答案 1 :(得分:1)

您必须仅发布参考:

jintArray pixels = env->NewIntArray(width * height);
...
env->DeleteLocalRef(pixels)