В приведенной ниже класс имеет уникальный жизненный цикл, который требует от меня, чтобы временно обнулять lateinit
свойстваКак установить lateinit Котлин свойство NULL
class SalesController : BaseController, SalesView {
@Inject lateinit var viewBinder: SalesController.ViewBinder
@Inject lateinit var renderer: SalesRenderer
@Inject lateinit var presenter: SalesPresenter
lateinit private var component: SalesScreenComponent
override var state = SalesScreen.State.INITIAL //only property that I want to survive config changes
fun onCreateView(): View { /** lateinit variables are set here */ }
fun onDestroyView() {
//lateinit variables need to be dereferences here, or we have a memory leak
renderer = null!! //here's the problem: throws exception bc it's a non-nullable property
} }
Вот как он используется в рамках ,
controller.onCreateView() //same instance of controller
controller.onDestroyView() //same instance of controller
controller.onCreateView() //same instance of controller
controller.onDestroyView() //same instance of controller
Мои lateinit
свойства впрыскивают кинжалом, и мне нужно, чтобы установить их null
в onDestroyView
- или есть утечка памяти. Это, однако, невозможно в котлине, насколько мне известно (без отражения). Я мог бы сделать эти свойства обнуляемыми, но это могло бы превзойти цель нулевой безопасности Котлина.
Я не совсем уверен, как это решить. В идеале может существовать какой-то тип обработчика аннотаций, который бы генерировал Java-код для автоматического исключения определенных переменных в onDestroyView
?
Почему у вас есть утечка? возможно, проблема заключается в SalesController, а не в его свойствах? Мне никогда не нужно явно указывать свойство, введенное кинжалом, чтобы избежать проблем с утечкой ... – Massimo
@ Контролируемые экземпляры контроллера Massimo Conductor сохраняют изменения конфигурации https://github.com/bluelinelabs/Conductor – ZakTaccardi
Если вам нужно их свести на нет, вам не нужно иметь «lateinit». И я уверен, что у вас там нет утечки, вы просто смешиваете некоторые определения. Вы бы просочились, если ваш ведущий ссылался бы на ваш вид, а не наоборот – Dimezis