Pertanyaan Apakah saya perlu memanggil ReleaseIntArrayElements pada array yang dibuat dengan NewIntArray?


Saya memiliki metode asli yang bekerja pada bitmap. Di dalam metode, saya mengambil data gambar melalui pemanggilan metode yang menulis data ke a jintArray parameter yang saya buat dengan NewIntArray:

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

Saya tidak perlu mengembalikan array ini ke kode Java yang dipanggil - itu hanya untuk diproses sementara dalam metode ini. Apakah saya perlu menelepon ReleaseIntArrayElements di pixels? Jika demikian, apa yang harus saya berikan untuk elems parameter, karena saya tidak perlu menyalinnya kembali ke array Java?

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


10
2018-05-11 14:32


asal


Jawaban:


Anda tidak perlu melakukan apa pun dengannya. Ini adalah referensi lokal dan akan dibersihkan ketika metode JNI Anda keluar. Seperti yang dijelaskan Edward Thompson di atas, ReleaseIntArrayElements() adalah kebalikan dari GetIntArrayElements(). Ia tidak memiliki fungsi lain.


12
2018-05-11 23:53



Anda harus merilis hanya referensi:

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

0
2017-09-08 09:02