我一直试图在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/