kmm.icerock.dev icon indicating copy to clipboard operation
kmm.icerock.dev copied to clipboard

Вопрос по заморозке объектов.

Open Starmel opened this issue 4 years ago • 1 comments

Для общения с KMM кодом используем прокладку в виде типа, который похож на cold Single Rx тип.

https://gist.github.com/d249f04577a72fae3874b08b31a2c39f

Чтобы на iOS не было проблем с обращением к Kotlin объектам на разных потоках, есть расширение, которое фризит результаты перед возвратом на платформу.

https://gist.github.com/41d9bf9a1f7e2d3c2993997a5888ac9f

Есть ли какие-то подводные камни, что это может привести к утечкам памяти или другим проблемам? Спасибо за ответ.

Starmel avatar Apr 05 '21 10:04 Starmel

Привет! Сам подход к утечкам привести не должен. Если утечки и возникнут то по другим причинам (чаще всего циклы с участием swift объектов этому виной - если цикл состоит из объектов созданных самим котлином то сборщик мусора это заметит и почитстит, а вот при участии свифтовых объектов сборщик не справится - нужны слабые ссылки в правильных местах). гарантированная заморозка перед передачей на платформу несет явную пользу - не надо задумываться о том что объект полученный с котлина нельзя на другие потоки кидать, а с данной реализацией можно кидать объект по потокам и все будет ок. главное чтобы интерфейс этих объектов не содержал никаких возможностей для редактирования (то есть иммутабельные классы использовать как результаты) - иначе если кто-то с натива дернет метод редактирования то получит креш о попытке мутировать замороженный объект

Alex009 avatar Apr 08 '21 01:04 Alex009