如何在iOS应用中使用Kotlin-Multiplatform在后台线程上运行任务?

3
我一直在尝试在iOS项目的后台线程上运行Kotlin-Multiplatform库中的任务,但遇到了一些问题:
我尝试使用Kotlin-Coroutines和GCD平台库,但只能在iOS的主线程中运行任务。每当我尝试将某些东西异步发送到后台线程时,iOS应用程序会崩溃,并显示以下错误信息:“kotlin.native.IncorrectDereferenceException: illegal attempt to access non-shared com.hp.jarvis.kmm.LogFile.$saveLog$lambda-0$FUNCTION_REFERENCE$9@155a948 from other thread”。
1个回答

4
IncorrectDereferenceException 主要是一个信号,表示你正在尝试从后台线程访问全局状态。
你可以试着使用以下方法:
  • @ThreadLocal -> 为特定对象的每个线程创建副本
  • @SharedImmutable -> 将对象冻结并使其可用于所有线程,请注意,如果您尝试更改冻结对象的值,将会得到InvalidMutabilityException
我建议阅读这篇博客了解当前的内存模型:https://touchlab.co/kotlin-native-concurrency/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接