如何使用Kotlin多平台在iOS应用程序的后台线程中运行任务



我一直试图在iOS项目的后台线程上运行Kotlin多平台库中的任务,但遇到了一些问题:

我尝试使用Kotlin Coroutines和GCD的平台库,但只能在iOS的主线程中运行任务。每当我尝试异步发送东西到后台线程时,iOS应用程序就会崩溃,并出现以下错误:

"kotlin.native.InterrectDereferenceException:非法尝试从其他线程访问非共享com.hp.jarvis.kmm.LogFile.$saveLog$lambda-0$FUNCTION_REFERENCE$9@155a948;

IncorrectDereferenceException基本上是一个信号,表示您正试图从后台线程访问全局状态。

你可以玩:

  • @ThreadLocal->为特定对象的每个线程制作一个副本
  • @SharedImmutable->将冻结对象并使其可用于所有线程,请注意,如果您尝试更改冻结对象的值,则会得到InvalidMutabilityException

我肯定会读一读这个博客,以了解当前的内存模型:https://touchlab.co/kotlin-native-concurrency/

相关内容

  • 没有找到相关文章

最新更新