视图控制器的生命周期方法

1、application:didFinishLaunchingWithOptions:

在该方法中设置和初始化应用窗口的根视图控制器。该方法只会在应用启动完毕后调用一次,之后如果从其他应用切换回本应用,则该方法不会再次被调用。如果关闭应用后台进程,并重新启用该应用,该方法才会重新被调用

2、initWithNibName:bundle:

该方法是UIViewController的指定初始化方法,创建视图控制器时就会调用该方法。在某些情况下,需要在同一个应用创建多个相同的UIViewController子类对象,每次创建一个该类的对象时,都会调用一次该类的initWithNibName:bundle:方法。

3、loadView:

初始化view,由系统调用。
可以覆盖该方法,使用代码方式设置视图控制器的view属性

4、viewDidLoad:

可以覆盖该方法,设置使用NIB文件创建的视图对象。该方法会在视图控制器加载完视图后被调用。(该方法会在载入视图后立刻被调用,因此可以用于检查视图控制器的视图是否已经加载)

5、viewWillAppear:

可以覆盖该方法,设置使用NIB文件创建的视图对象。该方法和viewDidLoad:会在每次视图控制器的view显示在屏幕上时被调用
相反,viewWillDisappear:viewDidDisappear:方法会在每次视图控制器的view从屏幕上消失时调用
因此,如果打开HypnoNerd应用并在Hypnosis和Reminder两个标签项之间来回切换,那么BNRReminderViewController的viewDidLoad方法只会被调用一次,而viewWillAppear:方法会被调用很多次

viewDidAppear

viewWillAppear方法执行完后,由系统调用

这里写图片描述

6、懒加载(延迟加载)

用点语法容易出错,建议用”_”,如:

-(NSMutableArray* )operandStack{

               //延迟实例化
               if(_operandStack==nil){
                              _operandStack=[[NSMutableArray alloc]init];

               }
               return _operandStack;
}

6.1、在需要的时候才加载(效率低,占用内存小)。所谓懒加载,写的是其get方法。(懒加载只加载一次,一定要先判断属性是否为空,为空才执行逻辑,否则直接返回这个属性

6.2、
好处一:不必将创建对象的代码全部写在ViewDidLoad方法中,代码的可读性更强。
好处二:每个控件的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性更强,松耦合
好处三:加载过了就不会再次加载,节约了资源。
好处四:对于开发过程中可能会遇到的顺序问题,懒加载也可以很好的解决。

【松耦合:松耦合系统通常是基于消息的系统,此时客户端和远程服务并不知道对方是如何实现的。客户端和服务之间的通讯由消息的架构支配。只要消息符合协商的架构,则客户端或服务的实现就可以根据需要进行更改,而不必担心会破坏对方。】

简单梳理:

1、-[ViewController initWithCoder:]-[ViewController initWithNibName:Bundle]:首先从归档文件中加载UIViewController对象。即使是纯代码,也会把nil作为参数传给后者。
2、-[ViewController awakeFromNib]:作为第一个方法的助手,方便处理一些额外的设置。
3、-[ViewController loadView]:创建或加载一个view并把它赋值给UIViewController的view属性
4、-[ViewController viewDidLoad]:此时整个视图层次(view hierarchy)已经被放到内存中,可以移除一些视图,修改约束,加载数据等
5、-[ViewController viewWillAppear:]:视图加载完成,并即将显示在屏幕上,还没有设置动画,可以改变当前屏幕方向或状态栏的风格等。
6、-[ViewController viewWillLayoutSubviews]:即将开始子视图位置布局
7、-[ViewController viewDidLayoutSubviews]:用于通知视图的位置布局已经完成
8、-[ViewController viewDidAppear:]:视图已经展示在屏幕上,可以对视图做一些关于展示效果方面的修改。
9、-[ViewController viewWillDisappear:]:视图即将消失
10、-[ViewController viewDidDisappear:]:视图已经消失

如果考虑UIViewController可能在某个时刻释放整个view。那么再次加载视图时显然会从步骤3开始。因为此时的UIViewController对象依然存在。

参考链接:
UIView生命周期详解

创建控制器的方法、控制器加载view过程、控制器view的生命周期、多控制器组合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值