首页 技术 正文
技术 2022年11月21日
0 收藏 723 点赞 3,517 浏览 1609 个字

ViewController是view的controller,viewController的职责主要包括管理内部各个view的加载显示与卸载,同时负责与其他ViewController的通信和协调。

在IOS中 有两类ViewController:

1. 显示内容,比如UIViewController,UITableViewController等,同时还可以自定义继承自UIViewController得ViewController。

2. 用于控制和显示其他ViewController的ViewController。这种ViewController一般都是一个ViewController容器:如UINavigationViewController和UITabBarController等,

它们都有一个属性:viewControllers。UINavigationController是以Stack的形式来存储和管理ViewController,UITabBarController是以Array的形式来管理ViewController。

ViewController生命周期

alloc -> initWithNibName ->loadView ->viewDidLoad ->

viewWillAppear ->viewDidAppear -> viewWillDisappear ->

viewDidDisappear ->dealloc。

启动程序:  ViewDidLoad    [view即将显示,此时superview一般为nil,即view还没有加到任何一个view之中]

       ViewWillAppear    [view已经显示,被加到另一个view中]

       View Did Appear  [view即将消失,此时一半还没有调用removeFromSuperView]

按下Home键,并没有任何纪录(此时程序被挂起)

双击Home键,删除该程序:  ViewWillDisappear  [view从superview中移除了]

               View Did Disappear

当view被添加到其他view中之前时,会调用viewWillAppear,而之后会调用viewDidAppear

当view从其他view中移除之前时,会调用viewWillDisAppear,而之后会调用viewDidDisappear

所以只有内存不够的时候或是程序被终止的时候,才会调用viewWillDisappear和viewDidDisappear

loadView和viewDidLoad的区别就是,loadView时view还没有生成,viewDidLoad时,view已经生成了,loadView只会被调用一次,而viewDidLoad可能会被调用多次(view可能会被多次加载)。

代码组织 -- 》如何设计良好的viewcontroller

1. init里不要出现创建view的代码。在init里应该只有相关数据的初始化(非常重要),init里不要掉self.view,否则会导致viewcontroller创建view。(因为view是lazyinit的)。

2. loadView中只初始化view,一般用于创建比较关键的view如tableViewController的tabView,UINavigationController的navigationBar。

3. viewDidLoad这时候view已经有了,最适合创建一些附加的view和控件了。有一点需要注意的是,viewDidLoad会调用多次。

4. viewWillAppear这个一般在view被添加到superview之前,切换动画之前调用。在这里可以进行一些显示器前的处理。比如键盘弹出,一些特殊的过程动画。

5. viewDidAppear一般用于显示后。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,104
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,580
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,428
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,200
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,835
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,918