1.UIViewController生命周期、控制器间代理传值、block传值

控制器声明周期:

override func loadView() {
        super.loadView()
        print("1.加载视图时调用")
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        print("2.视图加载完成后调用")
    }
    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        print("3.即将布局子视图时调用")
    }
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        print("4.已经布局子视图时调用")
    }
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print("5.视图即将出现")
    }
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("6.视图出现")
    }
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        print("7.视图即将消失")
    }
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        print("8.视图已经消失")
    }
    deinit {
        print("析构方法")
    }
    
    override func didReceiveMemoryWarning() {
        print("收到内存警报")
    }

一次普通启动:

1.加载视图时调用
2.视图加载完成后调用
5.视图即将出现
3.即将布局子视图时调用
4.已经布局子视图时调用
6.视图出现
// viewwillAppear后加载子控件,修改子控件的frame值并不会触发layoutSubView

有xib子控件:

1.加载视图时调用
2.视图加载完成后调用
5.视图即将出现
3.即将布局子视图时调用
4.已经布局子视图时调用
3.即将布局子视图时调用
4.已经布局子视图时调用
6.视图出现
// viewwillAppear后会调用两次layoutSubView,不管加载多少个控件都只会多调一遍

通过present跳转控制器 present自带分页效果

  • 在present前给跳转的控制器赋值,在新控制器中的生命周期方法开始调用前就能拿到这个值,如果在present后赋值,那么只能在LoadView和ViewdidLoad后拿到,在新控制器的layoutSubView完成后,会调用前一个控制器的layoutSubView。
  • dismiss控制器后,析构方法将最后调用,前一个控制器的viewwillAppear并不会被再次调用,
  • 风险:写在viewwillAppear中的函数要注意,可以手动调用,此处拿到赋值abc

2.1.加载视图时调用
2.2.视图加载完成后调用
2.5.视图即将出现
2.3.即将布局子视图时调用
2.4.已经布局子视图时调用
2.3.即将布局子视图时调用
2.4.已经布局子视图时调用
3.即将布局子视图时调用
4.已经布局子视图时调用
2.6.视图出现
jump
2.7.视图即将消失
2.8.视图已经消失

2.析构方法

代理传值

TwoVC:
protocol TestTwoViewControllerDelegate {
    func sendContent(co:String);
}
var delegate:TestTwoViewControllerDelegate?
self.delegate?.sendContent(co: self.content ?? "")
OneVC:
class ViewController: UIViewController,TestTwoViewControllerDelegate 
实现代理
可选代理实现
@objc protocol TestTwoViewControllerDelegate {
    @objc optional func sendContent(co:String);
}
var delegate:TestTwoViewControllerDelegate?
self.delegate?.sendContent?(co: "a")

继承UIViewController

// 自定义构造方法:
init(parama:String) {
        super.init(nibName: nil, bundle: nil)// 必须调用系统指定的初始化函数
    }
    
required init?(coder: NSCoder) { // 必须实现
        fatalError("init(coder:) has not been implemented")
    }

你可能感兴趣的:(1.UIViewController生命周期、控制器间代理传值、block传值)