"объект" в kotlin получает мусор - PullRequest
0 голосов
/ 05 января 2019

Если у нас есть Объект , как это

object Repo { var activeMovies: ArrayList<Movie>? = null }

и затем мы называем это так, чтобы присвоить значение

Repo.activeMovies = movieList

после того, как Действие , которое его создало, закончено, оно получает Сборщик мусора ?

Я знаю, что это может быть очень простой вопрос, но я не могу понять жизненный цикл, если object введите Kotlin .

1 Ответ

0 голосов
/ 05 января 2019

Если мы создадим объект, подобный этому:

object Test {
    // some functions and properties
}

и декомпилируем его в Java , мы увидим следующий код:

public final class Test {
    public static final Test INSTANCE;

   static {
      Test var0 = new Test();
      INSTANCE = var0;
   }
}

Из декомпилированного кода видно, что object создает Singleton . Инициализация происходит в статическом блоке . В Java статические блоки выполняются во время загрузки класса. Экземпляр класса Test создается в тот момент, когда загрузчик классов загружает класс. Такой подход гарантирует отложенную загрузку и поточную безопасность . Экземпляр одноэлементного объекта хранится в статическом поле внутри класса этого объекта. Поэтому он не подходит для сборки мусора. Test - это Singleton , срок службы которого равен продолжительности жизни приложения.

Вот некоторая полезная информация о статических переменных Жизненный цикл статического объекта Android и статическая переменная null при возврате в приложение .

...