【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记25 Lifecycle生命周期

简介: 本话来讲解一下控制器的Lifecycle(生命周期)。 我们谈到的控制器的生命周期时,其实是在关注这个控制器在生命周期中接收到的一系列消息,这些消息伴随着整个的生命周期。

本话来讲解一下控制器的Lifecycle(生命周期)。


我们谈到的控制器的生命周期时,其实是在关注这个控制器在生命周期中接收到的一系列消息,这些消息伴随着整个的生命周期。为什么我们要关注生命周期?这是因为我们经常在子类中复写方法,以期望这些方法在某些特定的时刻发生作用。

生命周期由创建一个控制器开始,大部分时候我们是通过storyboard初始化的,通过Identifier segue到一个MVC也会创建一个控制器。

初始化之后会发生什么事情呢?如果你被segue到这个控制器的话,那么你会get prepared(做好准备),然后你的outlet会被初始化,之后可能会频繁地出现或者消失,甚至因为旋转屏幕而改变控制器的位置。当系统内存低的时候会让我们解决这些内存中的控制器等等各种问题。


当segue的准备和outlet被初始化之后,我们的视图开始被载入。这个时候会调用一个方法viewDidLoad,这个方法中非常适合放置你初始化你的视图的代码,因为一切都已就绪。如果你复写了viewDidLoad,第一件事是调用父类的方法:super.viewDidLoad。而且在控制器生命周期相关的方法中,你始终希望调用super的相应方法。

通常你在viewDidLoad中常做的一件事就是更新你的用户界面。之前我们说过一旦你的模型发生了改变,你会在模型的属性观察器中更新用户界面,你应该继续去做这个操作,因为你的控制器已经被载入而且显示在屏幕上了,有些人改变了模型你必须去更新你的用户界面。但是当你刚创建了一个控制器的时候,你同样需要更新你的用户界面。那是因为你的模型中的属性观察器并不会在outlet设置之前真正去更新你的用户界面。

注意你的控制器的边界会在晚一些的时候才会被设置。

下一个在生命周期中被调用的方法是viewWillAppear。当你的控制器马上要显示到屏幕上的时候才会出现。


viewWillAppear有一个参数这个参数表示这个控制器的出现是否带有动画效果,通常你不用关心这个参数,那么什么时候需要参数呢?比如你在导航控制器中通过segue新生成一个MVC,那么这个新MVC的控制器是滑动到我们视野中的,这就是动画。viewWillAppear在生命周期中可以被多次调用,因为你的控制器能显示在屏幕上也可以从屏幕上消失。例如分栏控制器,你打开ipad在竖屏模式是看不到master的你需要滑动显示master,当你旋转到横屏的时候就能看到master了,所以每一次master显示在屏幕上的时候,viewWillAppear都会被调用。当你调用viewWillAppear方法的时候你的视图的边界已经被设置好了。

此外还有一个viewDidAppear方法。当你已经显示在屏幕上的时候,才会调用viewDidAppear。与这两个方法相对,当控制器将要消失的时候,有方法ViewWillDisappear和ViewDidAppear。

接下来讲一下Geometry(几何位置),当你的视图几何位置改变时,系统会自动重新布局,因为你已经设置好了Auto Layout属性。


你可以在代码中捕获到这种视图边界的变化,当你顶层的子视图发生变化时,系统会调用viewWillLayoutSbuviews方法和viewDidLayoutSubviews方法,这两个方法经常被调用。

AutoLayout在这两个方法中间被调用。来看下下一个概念Autorotation(自动旋转):


到目前为止,我们在App中编写的代码,根本没有考虑过Autorotation,它自动发生,当我们的边界改变的时候。当我们的屏幕发生旋转的时候,边界是变宽了还是变窄了,然后你可以参照这个过程做一些事情。你可以到你的项目中取消特定的方向旋转,默认取消的是颠倒的竖屏。如果你想要编写屏幕旋转时的动画效果,你可以通过viewWillTransitionToSize。

现在还记得当系统内存不足的问题么,现在来解决这个问题:


我们之前讲过对象都在内存的堆中存储,当内存空间不足时,你可能会想办法从内存中移除某些类,此时指向这些类的指针也会被移除,它们变成了nil。清理内存首选那些占用系统资源多的内容,比如图片或者声音,我们把它们的指针全部设为nil,那么它们会被ARC所处理掉以节省空间。

下一个要讲到的是awakeFromNib


它严格来说并不在控制器的生命周期中,它是任何从storyboard中生成的对象都有的方法。下面来展示一下完整的生命周期:



目录
相关文章
|
前端开发 iOS开发
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记3 Xcode、Auto Layout及MVC
   继续上一话中的计算器Demo,上一话讲到类必须被初始化,类中的属性也必须被初始化,所以你不能只声明而不给它一个处置,那么问题来了,我们从storyboard中拖拽的@IBOutlet为什么只有声明而不需要初始化呢,这是因为它的类型依旧是一个optional,在你初始化之前已经被赋值为nil了,这也就是为什么你不需要再初始化它的原因。
943 13
|
前端开发 API
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记4 MVC enum Tuple Dictionary
 回顾一下我们上一话中的代码: @IBAction func operate(sender: UIButton) { let operation = sender.
868 0
|
Unix iOS开发
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记1 IOS8概述
  首先感谢网易公开课和SwiftV课堂的朋友们辛苦翻译,这个系列是我学习斯坦福IOS8公开课的个人心得体会和笔记,希望能给大家带来启发。
1130 0
|
12月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
10月前
|
iOS开发 开发者
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
600 67
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
|
9月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
356 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
11月前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
321 66
|
9月前
|
人工智能 程序员 API
iOS|记一名 iOS 开发新手的前两次 App 审核经历
啥,这玩意也有新手保护期?
231 0
|
11月前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
1046 11
|
11月前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
336 3

热门文章

最新文章