Слабый или Неизвестный или Нет

У меня есть класс 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 будет так же.

Другие вопросы по тегам