napi_open_escapable_handle_scope和napi_escape_handle接口在跨作用域值传递时有何作用?

如题:napi_open_escapable_handle_scope、napi_close_escapable_handle_scope和napi_escape_handle接口在跨作用域值传递时有何作用?

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

阅读 550
1 个回答

napi_open_escapable_handle_scope用于创建一个可逃逸的句柄作用域,在该作用域内创建的ArkTS对象可以通过napi_escape_handle逃逸到父作用域。napi_close_escapable_handle_scope用于关闭可逃逸的句柄作用域并清理资源。在跨作用域值传递场景中,通过这些接口可以将在子作用域中创建的对象传递到父作用域中继续使用,避免对象在子作用域结束时被意外释放。示例代码如下:

#include "napi/native_api.h"

static napi_value EscapableHandleScopeTest(napi_env env, napi_callback_info info) {
    napi_escapable_handle_scope scope;
    napi_open_escapable_handle_scope(env, &scope);
    napi_value obj = nullptr;
    napi_create_object(env, &obj);
    napi_value value = nullptr;
    napi_create_string_utf8(env, "Test napi_escapable_handle_scope", NAPI_AUTO_LENGTH, &value);
    napi_set_named_property(env, obj, "key", value);
    napi_value escapedObj = nullptr;
    napi_escape_handle(env, scope, obj, &escapedObj);
    napi_close_escapable_handle_scope(env, scope);
    napi_value result = nullptr;
    napi_get_named_property(env, escapedObj, "key", &result);
    return result;
}

ArkTS侧调用该函数并通过日志输出结果(如hilog.info(0x0000, 'testTag', 'Test Node-API EscapableHandleScopeTest: %{public}s', testNapi.escapableHandleScopeTest());),可以看到在父作用域中获取到了逃逸后的对象属性值。

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题