Интересуют особенности очистки памяти сборщиком мусора, а именно как он ведет себя с объектами, переданными в функции.
Пример #1.1:
val ft = supportFragmentManager.beginTransaction()
var fragment = ListObjectsFragment()
ft.replace(R.id.fragment_container, fragment, LIST_OBJECTS_FRAGMENT)
ft.commit()
Объект не будет помечен сборщиком мусора, пока на него есть ссылка, которая, в свою очередь, будет существовать до окончания работы метода.
Пример #1.2:
val ft = supportFragmentManager.beginTransaction()
var fragment: Fragment?
fragment = ListObjectsFragment()
ft.replace(R.id.fragment_container, fragment, LIST_OBJECTS_FRAGMENT)
ft.commit()
fragment = null
Объект будет помечен сборщиком мусора после коммита.
Пример #2:
val ft = supportFragmentManager.beginTransaction()
ft.replace(R.id.fragment_container, ListObjectsFragment(), LIST_OBJECTS_FRAGMENT)
ft.commit()
Объект будет помечен сборщиком мусора сразу, поскольку на него нет ссылки.
Можно вызвать самостоятельно сборщик мусора, но тогда приложение может зависнуть на пару секунд, а можно подождать вызов от системы. Получается, что разницы в объявлении объекта нет?