SwiftUI Просмотр жизненного цикла памяти - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть основной вид, в котором есть ViewModel, и он объявлен так:

@ObservedObject var viewModel = ViewModel()

Все работает отлично, но когда я перемещаю приложение в фоновый режим, а затем на передний план, представление воссоздается как как и моя viewModel, и все, что хранится в viewModel, исчезает.

В этом случае создание ViewModel одноэлементным классом решит проблему, но создание всех одноэлементных классов ViewModel не является хорошей идеей.

Есть ли обходной путь для этого?

Ответы [ 2 ]

2 голосов
/ 04 февраля 2020

Создание синглтона ObservedObject не очень хорошая идея по другим причинам. Так как вы хотите предварительно просмотреть ваши представления, вы должны как-то внедрить свою модель представления, чтобы упростить ее в более сложных случаях.

Всякий раз, когда мне понадобится синглтон в SwiftUI, я рассматриваю использование EnvironmentObject, добавленного из SceneDelegate (в реальном приложении) или из PreviewProvider в случае предварительного просмотра. Если вы сохраните ссылку в вашем SceneDelegate, она не будет воссоздана.

Что касается утечки памяти, модель представления не должна течь, если в ней нет циклов сохранения. Это будет очищено AR C.

0 голосов
/ 04 февраля 2020

Для данных, которые должны быть переданы SwiftUI дает нам @EnvironmentObject

...