美文网首页
iOS 两个控制器切换时生命周期函数的调用顺序

iOS 两个控制器切换时生命周期函数的调用顺序

作者: 4335151e8554 | 来源:发表于2017-12-21 13:26 被阅读0次

    1️⃣一个控制器的生命周期函数调用顺序没什么可讲的,问题是两个控制器切换时他们的生命周期函数的调用会穿插在一起。

    controller1的代码如下: QQ20171221-124944.png controller2的代码如下: QQ20171221-125556.png 从controller1通过modal的形式弹出controller2,生命周期函数的调用顺序如下 QQ20171221-125825.png 撤回controller2回到controller1 QQ20171221-130021.png 这样可以很清楚的看到他们的调用顺序,了解这个有什么用呢?当然有用了,比如controller1在viewDidLoad里设置了某个单粒的代理,在viewDidDisappear移除了代理,而controller2也在viewDidLoad里设置了这个代理,在viewDidDisappear移除了代理,由于controller1的viewDidDisappear方法后于controller2的viewDidLoad方法执行,从而导致controller2代理被清空了。当然还有很多奇怪的现象都可能是这个原因产生的,比如导航栏的隐藏和显示,状态栏的隐藏和显示等等都可能会因为生命周期的调用顺序而产生bug
    2️⃣当两个控制器是父子关系,其中子控制器是继承自父控制,生命周期函数的调用顺序如下
    2018-01-16 10:20:01.014480+0800 Buggy[452:405656] viewDidLoad父
    2018-01-16 10:20:01.025181+0800 Buggy[452:405656] viewDidLoad子
    2018-01-16 10:20:01.032503+0800 Buggy[452:405656] viewWillAppear父
    2018-01-16 10:20:01.032608+0800 Buggy[452:405656] viewWillAppear子
    2018-01-16 10:20:01.053415+0800 Buggy[452:405656] viewDidAppear父
    2018-01-16 10:20:01.053441+0800 Buggy[452:405656] viewDidAppear子
    
    2018-01-16 10:20:31.485817+0800 Buggy[452:405656] viewWillDisappear父
    2018-01-16 10:20:31.485929+0800 Buggy[452:405656] viewWillDisappear子
    2018-01-16 10:20:32.109451+0800 Buggy[452:405656] viewDidDisappear父
    2018-01-16 10:20:32.109613+0800 Buggy[452:405656] viewDidDisappear子
    

    相关文章

      网友评论

          本文标题:iOS 两个控制器切换时生命周期函数的调用顺序

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