当我初始化 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 没有被调用。因此,在将控制器加载到内存之前,如何取消初始化。