美文网首页
UIViewController生命周期

UIViewController生命周期

作者: Kity_Pei | 来源:发表于2019-07-30 10:37 被阅读0次
    init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)
    

    1.当使用纯代码创建控制器,控制器的构造器为 init(nibName:bundle:)。
    2.虽然使用代码创建时调用了该构造器,但传入的参数均为 nil。

    init?(coder aDecoder: NSCoder)
    

    1.当使用 Storyboard 时,控制器的构造器为 init(coder:)。
    2.该构造器为必需构造器,如果重写其他构造器,则必须重写该构造器。
    3.该构造器为可失败构造器,即有可能构造失败,返回 nil。
    4.该方法来源自 NSCoding 协议,而 UIViewController 遵从这一协议。
    5.该方法被调用意味着控制器有可能(并非一定)在未来会显示。
    6.在控制器生命周期中,该方法只会被调用一次。

    func awakeFromNib()
    

    1.当使用 Storyboard 时,该方法会被调用。
    2.当调用该方法时,将保证所有的 outlet 和 action 连接已经完成。
    3.该方法内部必须调用父类该方法,虽然默认实现为空,但 UIKit 中许多类的该方法为非空。
    4.由于控制器中对象的初始化顺序不能确定,所以构造器中不应该向其他对象发送消息,而应当在 awakeFromNib() 中安全地发送。
    5.通常使用 awakeFromNib() 可以进行在设计时无法完成的必要额外设置。

    func loadView()
    

    1.loadView() 即加载控制器管理的 view。
    2.不能直接手动调用该方法;当 view 被请求却为 nil 时,该方法加载并创建 view。
    3.若控制器有关联的 Nib 文件,该方法会从 Nib 文件中加载 view;如果没有,则创建空白 UIView 对象。
    如果使用 Interface Builder 创建 view,则务必不要重写该方法。
    4.可以使用该方法手动创建视图,且需要将根视图分配为 view;自定义实现不应该再调用父类的该方法。
    5.执行其他初始化操作,建议放在 viewDidLoad() 中。

    func viewDidLoad()
    

    1.view 被加载到内存后调用 viewDidLoad()。
    2.重写该方法需要首先调用父类该方法。
    3.该方法中可以额外初始化控件,例如添加子控件,添加约束。
    4.该方法被调用意味着控制器有可能(并非一定)在未来会显示。
    5.在控制器生命周期中,该方法只会被调用一次。

    func viewWillAppear(_ animated: Bool)
    

    1.该方法在控制器 view 即将添加到视图层次时以及展示 view 时所有动画配置前被调用。
    重写该方法需要首先调用父类该方法。
    2.该方法中可以进行操作即将显示的 view,例如改变状态栏的取向,类型。
    该方法被调用意味着控制器将一定会显示。
    3.在控制器生命周期中,该方法可能会被多次调用。

    func viewWillLayoutSubviews()
    

    1.该方法在通知控制器将要布局 view 的子控件时调用。
    2.每当视图的 bounds 改变,view 将调整其子控件位置。
    3.该方法可重写以在 view 布局子控件前做出改变。
    4.该方法的默认实现为空。
    5.该方法调用时,AutoLayout 未起作用。
    6.在控制器生命周期中,该方法可能会被多次调用。

    func viewDidLayoutSubviews()
    

    1.该方法在通知控制器已经布局 view 的子控件时调用。
    2.该方法可重写以在 view 布局子控件后做出改变。
    3.该方法的默认实现为空。
    4.该方法调用时,AutoLayout 已经完成。
    5.在控制器生命周期中,该方法可能会被多次调用。

    func viewDidAppear(_ animated: Bool)
    

    1.该方法在控制器 view 已经添加到视图层次时被调用。
    2.重写该方法需要首先调用父类该方法。
    3.该方法可重写以进行有关正在展示的视图操作。
    4.在控制器生命周期中,该方法可能会被多次调用。

    func viewWillDisappear(_ animated: Bool)
    

    1.该方法在控制器 view 将要从视图层次移除时被调用。
    2.类似 viewWillAppear(_:)。
    3.该方法可重写以提交变更,取消视图第一响应者状态。

    func viewDidDisappear(_ animated: Bool)
    

    1.该方法在控制器 view 已经从视图层次移除时被调用。
    2.类似 viewDidAppear(_:)。
    3.该方法可重写以清除或隐藏控件。

    func didReceiveMemoryWarning()
    

    1.当内存预警时,该方法被调用。
    2.不能直接手动调用该方法。
    3.该方法可重写以释放资源、内存。

    相关文章

      网友评论

          本文标题:UIViewController生命周期

          本文链接:https://www.haomeiwen.com/subject/hgzgqqtx.html