Kotlin Multiplatform (KMM) 中的对象在 Swift 函数中实例化。函数结束它的作用域。谁释放了对象?

Posted

技术标签:

【中文标题】Kotlin Multiplatform (KMM) 中的对象在 Swift 函数中实例化。函数结束它的作用域。谁释放了对象?【英文标题】:Object from Kotlin Multiplatform (KMM) instantiated inside Swift function. Function ends its scope. Who deallocates the object? 【发布时间】:2021-12-30 13:31:15 【问题描述】:

如果我在 ios 上的 Swift 函数内从 Kotlin Multiplatform 实例化一个对象,当函数完成其作用域时,谁会释放 Kotlin 对象? iOS 还是 Kotlin 垃圾收集器?

我知道 Kotlin Native 有自己的垃圾收集器。但让我感到困惑的是,当您在 Swift/ObjC 中拥有 Kotlin Native 对象并在 Kotlin Native 中拥有 ObjC 对象时,内存管理是如何工作的。

【问题讨论】:

Kotlin/Native memory management 【参考方案1】:

简短的回答,Kotlin 的 GC。

像其他 Objc 对象一样呈现给 iOS 的 Kotlin 原生对象。他们将像其他 Objc 对象一样获得内存管理调用。当 iOS 中没有任何东西持有对 KN 对象的引用时,KN 运行时将收集它,尽管具体何时发生更为复杂。对象不一定会立即释放。另外,现在有两种主要的内存模型,我想它们可以工作

【讨论】:

也许我的问题并没有我想的那么清楚。如果我在 Swift 函数中从 Kotlin Native 实例化一个对象,当 Swift 函数完成其作用域时,谁来处理 GC?

以上是关于Kotlin Multiplatform (KMM) 中的对象在 Swift 函数中实例化。函数结束它的作用域。谁释放了对象?的主要内容,如果未能解决你的问题,请参考以下文章

KMM(Kotlin Multiplatform Mobile)环境搭建

KMM(Kotlin Multiplatform Mobile)环境搭建

使用 Kotlin Multiplatform Mobile (KMM) 的多平台应用程序中的 DataBinding 错误

KMM(Kotlin Multiplatform Mobile)Welcome to Kotlin/Native World

KMM(Kotlin Multiplatform Mobile)Welcome to Kotlin/Native World

KMM(Kotlin Multiplatform Mobile)Welcome to Kotlin/Native World