2015-04-17 1 views
1

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()?

ответ

1

isCopy параметр для GetStringUTFChars() является лишь попыткой обеспечить подпись, совместимую с другими аналогичными функциями JNI. Во всех известных реализациях JVM всегда всегда JNI_TRUE, потому что строки Java хранятся внутри несовместимого формата UCS-16.

Но все же вы не можете освободить cstr, не зная контекста.

Смежные вопросы