ViewController的生命周期

来源:互联网 发布:gta5n卡掉帧如何优化 编辑:程序博客网 时间:2024/05/16 02:42

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
原创粉丝点击