#ios #multithreading #grand-central-dispatch #kotlin-coroutines #kotlin-multiplatform
Вопрос:
Я пытался запускать задачи в мультиплатформенной библиотеке Kotlin в фоновом потоке проекта iOS и столкнулся с некоторыми проблемами:
Я пробовал использовать как Kotlin-сопрограммы, так и библиотеки платформы для GCD и смог запускать задачи только в главном потоке в iOS. Всякий раз, когда я пытаюсь асинхронно отправить что-либо в фоновый поток, приложение iOS вылетает со следующей ошибкой:
«котлин,родной.Неправильное исключение: незаконная попытка доступа к файлу журнала, не являющемуся общим для com.hp.jarvis.kmm.$saveLog$лямбда-0$FUNCTION_REFERENCE$9@155a948 из другого потока»
Ответ №1:
IncorrectDereferenceException
по сути, это сигнал о том, что вы пытаетесь получить доступ к глобальному состоянию из фонового потока.
Ты мог бы поиграть с:
@ThreadLocal
-> Создает копию для каждого потока определенного объекта@SharedImmutable
-> Заморозит ваш объект и сделает его доступным для всех потоков, обратите внимание, что если вы попытаетесь изменить значение замороженного объекта, вы получитеInvalidMutabilityException
Я бы определенно прочитал этот блог, чтобы понять текущую модель памяти: https://touchlab.co/kotlin-native-concurrency/