ViewController的生命周期

ViewController中执行顺序

alloc -> init/initWithNibName -> loadView -> viewDidLoad -> viewWillAppear -> viewDidAppear -> viewWillDisappear -> viewDidDisappear -> dealloc
其中,viewWillUnload和viewDidUnload已经在iOS6被废弃了
另外,整个过程没有viewWillLoad。还有,viewDidLoad和viewDidUnload并不是成对的。

push和pop执行顺序

例如CurrentView在navigation controller中push一个新的NewView,顺序为
2015-04-14 11:04:07.644 Demo[12985:839324] CurrentView Will Disappear
2015-04-14 11:04:07.644 Demo[12985:839324] NewView Will appear
2015-04-14 11:04:08.149 Demo[12985:839324] CurrentView Did Disappear
2015-04-14 11:04:08.149 Demo[12985:839324] NewView Did appear

pop的顺序为
2015-04-14 11:04:19.955 Demo[12985:839324] CurrentView Will Appear
2015-04-14 11:04:20.458 Demo[12985:839324] CurrentView Did Appear

但需要注意的是,在特殊情况下,比如在右滑返回中,滑动到一半后返回,出现的情况是:
2015-04-14 11:39:36.289 Demo[13319:862461] CurrentView Will Appear
2015-04-14 11:39:39.382 Demo[13319:862461] CurrentView Will Disappear
2015-04-14 11:39:39.382 Demo[13319:862461] CurrentView Did Disappear
2015-04-14 11:39:39.382 Demo[13319:862461] NewView Will appear
2015-04-14 11:39:39.382 Demo[13319:862461] NewView Did appear
详见博文:http://wangling.me/2014/02/the-inconsistent-order-of-view-transition-events.html
也就是说在viewWillAppear中执行的一些操作,可能在右滑一半并取消的时候也执行了,会导致一些问题,比如NavigationBar的显示等。

最近遇到的坑

但是右滑返回时只考虑了Disappear和Appear,没考虑push页面时,viewDidLoad的顺序
发现在iOS8及以下系统里,在push时,会先执行新页面的viewDidLoad,再执行前一个页面的viewWillDisappear
而iOS9中则先执行viewWillDisappear,再执行viewDidLoad
求解,为什么会有这样的问题。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值