iOS 一个应用程序从创建到销毁的过程

大家都知道一个应用程序从应用程序的图标被点击开始就已经启动,那么他是怎么运行的呢

首先程序启动创建的第一个对象就是 UIApplication ,然后创建他的代理,在 main 函数 里开启一个事件循环,也可以认为是一个死循环,在这个循环里把时间按先后顺序依次拿出来进行处理,所以这也是 main 函数为什么就一行代码 ,本来应该执行完程序结束,可是程序一直能执行就是这个原因,与之相关的还有 NSRunLoop,当然这又涉及了线程问题以及同步异步的问题,通常系统会默认开启一个线程就是主线程,默认有一个 runloop,如果自己需要开启子线程,则要手动开启 runloop.那么扯远了,程序启动创建的第一个视图空间就是 UIWindow,其实他是一个特殊的 UIView,它之所以能够显示视图,完全就是因为他有 makeKeyandVisible 方法,所以其他的视图只有依赖于 window 才能显示出来,然后就要创建控制器,控制器的创建可以分为三种方式,如果有 storyboard 就会自动加载并且加载控制器所在的视图,另外还可以通过代码创建 ,需要先创建一个 window,然后创建一个控制器,把 window 的 rootviewController 设置为该控制器,这样就可以加载当前控制器并得到视图,另外一种方式就是通过 xib 创建

从程序启动到 view 显示

start ->加载frameWork,动态静态链接库,启动图片, info.plist,pch等-> main 函数->UIApplication 函数:

----初始化 UIApplication 单例对象

----初始化 AppDelegate 对象并设为 UIApplication 对象的代理

----检查 info.plist 设置的 xib 文件是否有效,创建 key window ,viewController,设置 rootviewController,需要注意的是 viewController 的根视图也同样有三种加载方式,首先就是 loadView 方法,如果有这个方法就不去 storyboard 里查找,故事版里查找不到就去 xib 里查找,最后创建一个空的 view.

--- 建立一个主事件循环,其中包含 UIApplication 的 runLoop 来开始处理事件

UIApplication:

1.通过 window 管理视图

2.发送 runloop 封装好的control消息给 target

3.处理 URL, 应用图标警告,联网状态,状态栏,远程事件等

AppDelegate:

1.管理 UIApplication 生命周期和应用的五种状态

KeyWindow:

1.显示 view

2. 管理 rootViewController 的生命周期

3. 分发 UIApplication 传来的消息给 view

RootViewController

1.管理 view(view 的生命周期,数据源,代理,nextresponder)

2.界面的跳转与传值

3.状态栏.屏幕旋转

View:

1.通过作为 CALayer 的代理,管理 Layer 的渲染和动画

2.布局子控件

3.事件响应 event gesture

Runloop:

1.一个线程只有一个对应的 runLoop,但这个根 runLoop 里可以嵌套子 runLoops ,自动释放池寄生于 RunLoop, 程序启动后,主线程注册了两个 observer 监听runLoop 的进出与休眠

线程(创建)-> runLoop 将进入-->最高优先级observer 创建释放池-> runLoop 将休眠->最低优先级 observer 销毁旧池创建新池-> runLoop 将退出->最低优先级 observer 销毁新池->线程销毁

2. 主线程的 runLoop 自动创建,子线程的 runLoop 默认不创建,可手动创建


















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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值