今天总结一下 View Controller Lifecycle和Autolayout,即课程的第8节。
1. View Controller Lifecycle
其实听了两遍课程之后,我还是不能准确的总结出每一个controller的生命周期是多长。controller即MVC中的C,在MVC被创建后,controller的生命周期开始,这个很容易理解。但是我困惑的是MVC生命周期的结束。
- 首先怎么定义MVC生命周期的结果?controller的deinit函数被调用(内存释放)?还是View disapper了?对于调用Segue产生的MVC来说,只要这个MVC被从桌面移出了(disapper了),那么它就不会再出现了,因为每一次调用segue都是产生的新的MVC。通过课堂上的例子看的话,MVC的disppear和deinit并不是同时的。MVC Disappear的时候,并不会调用deinit,直到有一个新的同一类型的MVC产生的时候,disappear的MVC才会init。
- 我觉得还是要根据内存释放来定义controller的生命周期结束。但是问题是,这个内存释放的时间点事确定的么?
现在这两个问题自己还是无法解答,只能以后咨询别人或者在时间问题中慢慢琢磨了。不过本节课的侧重点并不是这个。本节课的侧重点是让你知道MVC的生命周期中各个主要的操作节点,即相应的API,然后通过覆盖相应的API函数来实现具体的工作。
总结一下,在View Controller的lifecycle中,有以下几个阶段:
- Instantiated (from storyboard usually)
- awakeFromNib
- segue preparation happens
- outlets get set
- viewDidLoad
- These pairs will be called each time your controller‘s view goes on/off screen...
- viewWillAppear and viewDidAppear
- viewWillDisappear and viewDidDisappear
- These ‘geometry changed" methods might be called at any time after viewDidLoad ...
- viewWillLayoutSubviews( ... then autolayout happens, then ...) viewDidLayoutSubviews
- If memory get low, you might get ...
- didReceiveMemoryWarning
2. Autolayout
其实本节课程并没有讲太多有关于Autolayout的东西。主要就是size class。size class概念很容易理解。
继承的协议为UITraitEnvironment,这个协议中有一个属性traitCollection,一个API traitCollectionDidChange。
这篇博客讲的有关compact和regular的知识很好:http://www.learnswift.io/blog/2014/6/12/size-classes-with-xcode-6-and-swift
经常翻阅吧。
时间: 2024-10-29 19:07:12