HarmonyOS 鸿蒙Next下napi层创建的napi_value的销毁时机是如何的呢?似乎无法触发销毁
HarmonyOS 鸿蒙Next下napi层创建的napi_value的销毁时机是如何的呢?似乎无法触发销毁
如以下代码所示,Destructor一直无法触发,哪怕ArkTs的对象已经过了作用域了
napi_value jsThis;
napi_property_descriptor properties[] = {
{ “calculateNum”, nullptr, JNI_CalculateServiceWrappedImpl::calculateNum_jni, nullptr, nullptr, nullptr, napi_default, nullptr }
};
napi_create_object_with_properties(env, &jsThis, 2, properties);
CalculateServiceWrapped* obj = CalculateServiceWrapped::GetInstance();
// 通过napi_wrap将ArkTS对象jsThis与C++对象obj绑定
napi_wrap(env,
jsThis,
reinterpret_cast<void*>(obj),
JNI_CalculateServiceWrappedImpl::Destructor,
nullptr, // finalize_hint
nullptr);
return jsThis;
{
let calculateService1 = testNapi.CalculateServiceWrapped.GetInstance();
calculateService1.calculateNum(5);
}
//在程序运行到这里后,calculateService1依然没有触发finalize
在HarmonyOS鸿蒙Next系统中,napi_value的销毁时机通常与JavaScript引擎的垃圾回收机制(GC)相关联。napi_value作为NAPI(Native Abstraction Interface)层的数据结构,代表JavaScript环境中的值。这些值的生命周期管理主要由JavaScript引擎负责。
当napi_value所代表的对象在JavaScript环境中不再被引用时,JavaScript引擎的垃圾回收器会在适当的时机自动销毁这些对象,并回收相应的内存资源。因此,开发者通常不需要手动销毁napi_value,除非有特定的资源管理需求,比如管理原生资源(如文件句柄、网络连接等)。
在NAPI层,如果开发者创建了与napi_value关联的原生资源,应该使用适当的机制(如引用计数、智能指针等)来管理这些资源的生命周期,并在适当的时候释放它们。
如果napi_value的销毁时机看起来不正确,可能是因为JavaScript引擎的垃圾回收器尚未运行,或者napi_value所代表的对象仍在被JavaScript代码引用。这通常不是手动干预销毁时机的问题,而是需要检查和调整JavaScript代码中的引用关系。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html