iOS之浅谈视图控制器的生命周期

这段时间研究了一下视图控制器的生命周期,在网上找了很多的资料,顺着大家的详细描述和说明,我也做了相应的实验去验证,其中包括一些扩展的内容研究。所以想写一篇文章来记录下研究的心得,但是还是感觉没有理解很透彻,所以这也是标题中使用“浅谈”的目的,这篇文章会随着以后的不断学习和理解进行更新。

下面就开始正题:
虽然我在学习的过程中做了很多实验,不过我会以一种总结的格式来书写本文的板书,这也利于以后的修改和总结
我们平时创建项目的时候经常顺着苹果推荐使用storyboard的思路使用Single View Application模板,所以大多时候我们并不关心在AppDelegate类和viewController类之间发生了什么。只需要明白对于viewController中的初始化信息就放在viewDidLoad中来写。其实一个类的加载过程中是有很多方法的,下面就按照加载的先后顺序来依次说明:
1、初始化方法:视图控制器的初始化方法有三种,init、initWithCoder、initWithNibName这三种,如果在AppDelegate的入口方法
(或者是其他会进行创建视图控制器的地方)使用init或者是initWithNibName方法进行视图控制器的对象创建,实际上本质上都是调用了initWithNibName方法,而initWithCoder方法我们一般是不会使用它来初始化对象的(对于这个方法的原理我目前也没有研究地很清楚)。这里需要说明的一点是,如果去重写这几个方法,然后在方法里面打印self.view,是可以访问到这个值的,也就是说在调用这几个初始化方法的时候view已经存在了(但是需要注意的是背景颜色是黑色的),这个原因也是下面一点中提到的,视图的操作方法(包括加载方法都是在alloc操作的时候就进行了)
2、视图的操作方法:loadView、viewDidLoad(以及一系列的视图的加载,出现等)这些方法通过我的测试发现(创建视图控制器对象的时候只使用alloc方法,不适用init方法),是在使用alloc进行内存分配的时候就调用了。另外,一个特别要注意的地方是:视图控制器创建视图的地方就是在loadView方法中,如果不重写,那么系统会默认调用loadView方法去创建对象,这也是为什么视图控制器创建好了之后就存在一个view,如果我们重写loadView方法,但是在里面不调用super的loadView方法,也就是不去创建一个view的话,那么就会发生一个特别奇怪的现象,就是不停地调用loadView方法和viewDidLoad方法。在loadView方法里面没有去创建view,是不会报错的,但是程序进入到viewDidLoad方法中的时候,去找view,却发现找不到,所以又返回到loadView方法中去。通过这点我们也可以loadView就是view的加载方法,在很多的场景中,如果视图为nil,需要加载view,就会调用loadView方法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值