视图控制器的生命周期方法
2017-07-16 17:57
260 查看
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的生命周期、多控制器组合
相关文章推荐
- 视图控制器生命周期中各个重要的方法(Swift) (Important Methods during the Lifecycle of a View Controller)
- 视图控制器的生命周期方法
- iOS UI-(多)视图控制器的生命周期、加载方法和模态视图方法以及屌丝方法
- 控制器向视图传递数据的方法
- 视图控制器的一些方法的执行顺序
- MVC使用jQuery从视图向控制器传递Model,数据验证,MVC HTML辅助方法小结
- iOS多视图控制器跳转方法
- 视图控制器生命周期
- 【iOS开发-30】UITabBarController的几种代理方法以及结合NSUserDefaults还原上次退出时被选中视图控制器和视图控制器的顺序
- iOS开发UI篇—0408控制器View的生命周期方法
- 1210笔记//关于导航实例-QQ空间//导航实例-storyboard实现//控制器的生命周期//控制器的生命周期方法
- iOS 导航控制器、标签、表视图的创建方法
- 控制器的生命周期方法题及内存警告时的处理
- iOS之浅谈纯代码控制UIViewController视图控制器跳转界面的几种方法
- 视图控制器ViewController的生命周期
- iOS开发那些事--iOS视图生命周期与视图控制器关系
- iOS之浅谈纯代码控制UIViewController视图控制器跳转界面的几种方法
- IOS7笔记-5、视图控制器生命周期
- 创建tabBarControllers视图控制器的方法
- iOS 5 视图控制器增加的方法-备忘