stackoverflow.com/questions/5859673 указывает, что необходимо вызывать ReleaseStringUTFChars()
независимо от того, была ли скопирована строка. Итак, каков параметр jboolean *isCopy
в категории GetStringUTFChars()
?Как работают GetStringUTFChars и ReleaseStringUTFChars?
Могу ли я освободить строку C, когда исходная строка jstring выходит за пределы области видимости? Например, в этом псевдокоде:
static const char *cstr;
JNIEXPORT void JNICALL Java_com_Run(JNIEnv *e, jobject obj, jstring s) {
cstr = (*e)->GetStringUTFChars(e, s, 0);
}
void cfunc() {
// Can I use and release the cstr here? How?
}
Согласно документации, которую я должен получить ссылку через NewGlobalRef()
и выпустить его позже, если я хочу использовать объект Java после финиша вызова JNI. Правильно ли это правило для строк, полученных через GetStringUTFChars()
?