iOS开发-ViewController的生命周期分析和使用

一、结构

按结构可以对iOS的所有ViewController分成两类:

1、主要用于展示内容的ViewController,这种ViewController主要用于展示内容,并与用户交互,如UITableViewController,UIViewController。

2、用于控制和显示其他ViewController的ViewController,其实这种ViewController一般都是多个ViewController的容器。如UINavigationController,UITabbarController。它们都有一个属性:viewControllers。其中UINavigationController表示一种Stack式结构,push一个ViewController或pop一次,因此后一个ViewController一般会依赖前一个ViewController。而UITabbarController表示一个Array结构,各个ViewController是并列的。

注:在Xcode中新建一个ViewController时,只可以选择继承自UIViewController、UITableViewController和UICollectionViewController,而它们都是第一种。

二、ViewController和ViewController中View的生命周期

三、代码组织(如何设计良好的ViewController)

  • ViewController生命周期中有那么多函数,一个重要问题就是什么代码该写在什么地方?
  • init里不要出现创建view的代码。良好的设计,在init里应该只有相关数据的初始化,而且这些数据都是比较关键的数据。init里不要调用self.view,否则会导致ViewController创建view。(因为view是lazyinit的)。
  • loadView中会初始化view,一般用于创建比较关键的view如tableViewController的tabView,UINavigationController的navgationBar,但最好不要在此处写代码,也建议不要重写这个方法。
  • viewDidLoad中view已经有了,最适合创建view和子控件。大多数代码都会放在此处进行处理。有一点需要注意的是,viewDidLoad会调用多次。
  • viewWillAppear 这个一般在view被添加到superview之前,切换动画之前调用。在这里可以进行一些显示前的处理。比如键盘弹出,一些特殊的过程动画(比如状态条和navigationbar颜色)。
  • viewDidAppear 一般用于显示后,在切换动画后,如果有需要的操作,可以在这里加入相关代码。
  • viewDidUnload 这时候ViewController的view已经是nil了。由于这一般发生在内存警告时,所以在这里你应该将那些不在显示的view释放了。比如你在ViewController的view上加了一个label,而且这个label是ViewController的属性,那么你要把这个属性设置成nil,以免占用不必要的内存,而这个label在viewDidLoad时会重新创建。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值