app启动过程和UIViewController的生命周期

程序启动分为两类:1.有storyboard 2.没有storyboard

有storyboard情况下:

1.main函数

2.UIApplicationMain

* 创建UIApplication对象

* 创建UIApplication的delegate对象

3.根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard)

* 创建UIWindow

* 创建和设置UIWindow的rootViewController

* 显示窗口


没有storyboard情况下:

1.main函数

2.UIApplicationMain

* 创建UIApplication对象

* 创建UIApplication的delegate对象

3.delegate对象开始处理(监听)系统事件(没有storyboard)

* 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法

* 在application:didFinishLaunchingWithOptions:中创建UIWindow

* 创建和设置UIWindow的rootViewController

* 显示窗口


app启动过程和UIViewController的生命周期_第1张图片


问题:A页面push到B页面.  A页面先调用disappear还是B页面先调用willappear?

调用顺序:1.A页面调用willDisappear 2. B页面调用willAppear 3. A页面调用Diddisappear4. B页面调用Diaappear


app启动过程和UIViewController的生命周期_第2张图片




UIWindowLevel

UIWindow iOS系统为了保证UIAlertView在所有的界面之上,它会临时创建一个新的UIWindow,通过将其UIWindow的UIWindowLevel设置更高,让UIAlertView改在所有的应用界面之上。系统定义的UIWindowLevel一共有三个取值:UIWindowLevelNormal>UIWindowLevelStatusBar>UIWindowLevelAlert


didReceiveMemoryWarning

iOS 6以后,苹果会自动处理内存警告(以前是在viewDidUnlod)

UIView有一个CALayer的成员变量,CALayer是具体用于将自己画在屏幕上的,CALayer是一个bitmap图像的容器,当UIView调用自身的drawRect时,CALayer才会创建这个bitmap图像类。其中bitmap类是占用内存最大的,在iOS6中,当系统发出MemoryWarning的时候,系统会自动回收bitmap类,但是不回收UIView和CALayer类。

具体的是:bitmap内容的私有成员变量类型为CABackingStore

当收到内存警告的时候,CABackgourndStore类型的内存去就会被标记为volatile类型,表示这块内存可能在此被原变量使用,所有只要这块内存没有被复用,当需要重建bitmap是,它就可以直接被复用,从而避免了UIVIew在此调用DrawRect


----唐巧《iOS进阶开发》

你可能感兴趣的:(app启动过程和UIViewController的生命周期)