10

私はそれを知って世界中を検索しました.JNIコードで作成された場合はDeleteLocalRefする必要
があります.オブジェクトが新しく作成されてJavaコードによって返された場合も削除する必要がありますか? そのような:

// in java code
public SomeObject funcInJavaCode() {
    return new SomeObject();
}
// in jni code
funcInJNI {
    jobject obj = env->CallObjectMethod(...);
    ...
    // do i have to delete the obj here???
    env->DeleteLocalRef(obj);
}

ありがとう

4

2 に答える 2

0

その呼び出しはオブジェクトへの参照を解放するため、返されたオブジェクトへのローカル参照を削除することは絶対にできません。例えば

    jbitmap = invokeObjectJavaMethod("MFImageToNative", "([B)Landroid/graphics/Bitmap;", byte_array);

    env->DeleteLocalRef(jbitmap);

    return jbitmap;

クラッシュしますが、参照の解放に対処するのはメソッドの責任の消費者であると私は信じています。私は親切な魂がこれを行う方法を明確にすることができます.私は最も感謝しています.

于 2014-07-22T18:52:17.297 に答える