我在Kotlin / Native中看到了另一个功能,该功能在Kotlin JVM或JS中不存在。什么事啊
答案 0 :(得分:6)
来自Kotlin native's Concurrency docs
冻结是一种运行时操作,通过修改对象标头使给定的对象子图不可变,以便将来进行更改尝试会引发InvalidMutabilityException。它很深,因此,如果一个对象具有指向另一个对象的指针-此类对象的传递闭包将被冻结。冻结是转换的一种方式,冻结的对象不能被冻结。冻结对象具有很好的属性,由于它们具有不变性,因此可以在多个工作程序/线程之间自由共享它们,而不会破坏“可变XOR共享”不变式。
答案 1 :(得分:1)
分享来自 Kotlin Multiplatform Mobile 文档的更新更简单的解释here:
<块引用>Native 运行时向所有类添加了一个扩展函数 freeze()。 调用 freeze() 将冻结一个对象,以及所有引用的对象 对象,递归。 例如:
data class MoreData(val strData: String, var width: Float)
data class SomeData(val moreData: MoreData, var count: Int)
//...
val sd = SomeData(MoreData("abc", 10.0), 0)
sd.freeze()
<块引用>