【问题标题】:Kotlin multiplatform. What is StableRef lifetime?科特林多平台。什么是 StableRef 寿命?
【发布时间】:2023-02-23 15:12:20
【问题描述】:

我有 RedBlackTree 的 C 实现,我想将 Kotlin 对象存储在该树中。问题是:如何管理对象的生命周期以及它是如何工作的?

这是我在树中添加一对的代码

fun add(key: Key, value: Value) {
    val stableRef = StableRef.create(TreeMapEntry(key, value))
    c_rbinsert(nativeTree, stableRef.asCPointer())
}

c_rbinsert 是接受 void* 的 C 函数。

我有几个问题:

TreeMapEntry 是被发送到这里进行垃圾收集还是以某种方式保存在 StableRef 中?

我是否还需要在其他地方存储对 TreeMapEntry 的引用以阻止它被垃圾收集?

我需要手动处理 StableRef 吗?

管理此类结构生命周期的最佳实践是什么?

【问题讨论】:

    标签: c kotlin kotlin-multiplatform kotlin-native


    【解决方案1】:

    不,您不需要存储对 TreeMapEntry 的引用; StableRef.create 将为您创建它,它不会被 GC 处理。

    是的,您必须在完成后手动处理 StableRef,使用 StableRef#dispose() 方法。

    【讨论】:

      猜你喜欢
      • 2021-05-11
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      • 2018-04-11
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多