Когда я инициализирую экземпляр ABCViewController, чтобы выдвинуть этот контроллер, как я это сделал здесь.
private func showABCController() {
let storyBoard = UIStoryboard (
name: "PaymentView", bundle: Bundle(for: ABCViewController.self)
)
var abcViewController = storyBoard.instantiateViewController(withIdentifier: "ABCViewController") as! ABCViewController
abcViewController.delegate = self
}
Метод denit контроллера представления вызывается сразу после того, как делегату присваивается значение self, даже до того, как я нажимаюконтроллер представления: -
//ABCViewController.swift
import UIKit
protocol ABCViewControllerDelegate : class{
func backButtonPressed()
}
class ABCViewController: UIViewController {
weak var delegate : ABCViewControllerDelegate?
override func loadView() {
super.loadView()
print("loadView")
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
deinit {
delegate?.backButtonPressed()
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
}
*/
}
Моя проблема, почему deinit называется? Здесь я заметил, что другие методы, такие как loadview и viewdidload не вызывается. Поэтому, прежде чем контроллер будет загружен в память, как его можно деинициализировать.