我简化了错误,只有这个类:
class TestClass{
private var string = "Hello"
fun testError() {
string= "It Works"
GlobalScope.launch(Dispatchers.Default) {
string = "Doesn't work"
}
}
}
如果我在主线程上(在IOS上)启动TestClass()。testError(),它将引发InvalidMutabilityException(在行->字符串=“不起作用”)。因此,我认为在创建该变量的线程以外的线程上更改该变量可能不是一个好主意。所以我改为:
class TestClass{
private var string = "Hello"
fun testError() {
string= "It Works"
GlobalScope.launch(Dispatchers.Default) {
withContext(Dispatchers.Main) { string = "Doesn't work" }
}
}
}
但它仍然引发错误:
kotlin.native.concurrent.InvalidMutabilityException:冻结的com.example.project.TestClass@fe10a8的突变尝试
顺便说说。上面的两个代码都可以在Android端使用
Kotlin / Native具有与JVM不同的线程模型。TestClass
在lambda中捕获数据时冻结。该string
分配默默地捕捉父TestClass
并冻结它。
请参阅以下内容:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句