以下のコードについて質問があります。mConnectEnv、s_jObj、jmethodConnect を解放する必要がありますか? Googleで検索した情報に従ってください。jmethodConnect をリリースする必要はありませんが、 mConnectEnv と s_jObj はどうですか? したがって、j_ip をリリースするときに deleteLocalRef を使用しましたが、この方法は間違っていると思います。ReleaseStringUTF メソッドを使用する必要がありますか?
static JNIEnv* mConnectEnv = 0;
static jobject s_jObj;
static jmethodID jmethodConnect;
.............(JNIEnv* env, jobject obj)
{
mConnectEnv = env;
jclass s_jclass = (jclass)(*mConnectEnv)->GetObjectClass(mConnectEnv, obj);
s_jObj = (*mConnectEnv)->NewGlobalRef(mConnectEnv, obj);
jmethodConnect = (*mConnectEnv)->GetMethodID(mConnectEnv, s_jclass , "Connect", "(Ljava/lang/String;I)Z");
..............
}
int OpenConnection(char* ip, int port)
{
LOG_INFO("OpenConnectionat jni layer");
jstring j_ip = (*mConnectEnv)->NewStringUTF(mConnectEnv, ip);
int result = (*mConnectEnv)->CallBooleanMethod(mConnectEnv, s_jObj, jmethodConnect, j_ip, port);
(*mConnectEnv)->DeleteLocalRef(mConnectEnv, j_ip);
return result;
}