在ArkTS创建一个对象,通过napi_wrap将ArkTS对象与Native的C++对象绑定,第一次创建ArkTS对象后触发napi_wrap的垃圾回收回调,等回收完成后再次创建对象,垃圾回收回调不会触发。
ArkTS侧创建对象:

C++侧构造函数和析构函数:

napi_wrap绑定ArkTS对象与C++对象:

将napi_wrap替换为napi_wrap_enhance,napi_wrap_enhance会在绑定的时候把Native对象大小传给虚拟机,实现及时回收,示例代码如下:
// 通过napi_wrap将ArkTS对象jsThis与C++对象obj绑定
napi_status status = napi_wrap_enhance(env, jsThis, reinterpret_cast<void *>(obj), MyObject::Destructor, false,
nullptr, // finalizeHint
100 * 1024 * 1024, &obj->wrapper_); Q:析构Object时调用了napi_remove_wrap,那么对应的FinalizeCallback是否应该被移除?
A:调用napi_remove_wrap的时候,如果封装中关联有finalize回调,HarmonyOS中该导出接口将在移除封装前调用它。