Слабый или Неизвестный или Нет
У меня есть класс ViewController, как показано ниже:
class ViewController {
var viewModel = ViewModel()
viewDidLoad() {
self.viewModel.showAlert = { [weak self] in
self?.alert()
}
}
func alert() {
// alert logic
}
}
Вот класс ViewModel
class ViewModel {
var showAlert: (() -> Void)?
}
Теперь, это создает сильный референсный цикл или нет?
И если это создает один, то что использовать - слабый или неизвестный?
1 ответ
Решение
Это не создает сильный ссылочный цикл, потому что вы использовали weak self
,
ViewController
держит сильную ссылку на ViewModel
, ViewModel
держит сильную ссылку на закрытие. Закрытие содержит слабую ссылку на ViewController
:
VC ---strong---> ViewModel
^ |
| strong
| v
--------weak-----closure
Пока ViewController
освобождается (это происходит, когда вы, например, отклоняете его), ViewModel
будет так же.