iOS程序的启动过程-UIWindow
2015-06-14 17:41
483 查看
UIApplicationMain
main函数中执行了一个UIApplicationMain这个函数int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);
argc、argv:直接传递给UIApplicationMain进行相关处理即可
principalClassName:指定应用程序类名(app的象征),该类必须是UIApplication(或子类)。如果为nil,则用UIApplication类作为默认值
delegateClassName:指定应用程序的代理类,该类必须遵守UIApplicationDelegate协议
UIApplicationMain函数会根据principalClassName创建UIApplication对象,根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性
接着会建立应用程序的Main Runloop(事件循环),进行事件的处理(首先会在程序完毕后调用delegate对象的application:didFinishLaunchingWithOptions:方法)
程序正常退出时UIApplicationMain函数才返回
![](http://images.cnblogs.com/cnblogs_com/zhangdashao/682165/o_QQ%e6%88%aa%e5%9b%be20150614180813.png)
程序启动完整过程:
1.main函数2.UIApplicationMain
* 创建UIApplication对象
* 创建UIApplication的delegate对象
3.delegate对象开始处理(监听)系统事件(没有storyboard)
* 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法
* 在application:didFinishLaunchingWithOptions:中创建UIWindow
* 创建和设置UIWindow的rootViewController
* 显示窗口
3.根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard)
- 创建UIWindow
- 创建和设置UIWindow的rootViewController(storyboard中箭头指向的控制器)
- 显示窗口
有storyboard:官方文档:iosX /uikit/viewController p c for ios
The Main Storyboard Initializes Your App’s User Interface
The main storyboard is defined in the app’s Information property list file. If a main storyboard is declared in this file, then when your app launches, iOS performs the following steps:
It instantiates a window for you.
It loads the main storyboard and instantiates its initial view controller.
It assigns the new view controller to the window’s rootViewController property and then makes the window visible on the screen.
翻译:
主故事面板初始化应用程序的用户界面
主故事面板中定义的应用程序的信息属性列表文件。如果一个主要的故事是在这个info.plist文件中声明(main),然后当你的应用程序启动,iOS执行以下步骤:
1.它为你实例化一个窗口。
2.它加载(箭头所指向)主故事面板并实例化为初始视图控制器。
3.它赋予新的视图控制器窗口为RootViewController并将在屏幕上显示这个窗口内容。
一个程序之所以能显示东西是因为它有windows。
总结: 首先程序一启动就加载main.storyboard
加载完成后就开始创建windows
并且创建箭头所指向控制器并且设置为窗口根控制器并且把窗口显示出来 控制器 根控制器也跟着在屏幕上显示出来
相关文章推荐
- loadrunner生成随机uuid的方法
- 黑马程序员——GUI1:上篇
- RequestDispatcher跳转后的乱码问题
- 使用 UICollectionView 实现网格化视图效果
- The project was not built since its build path is incomplete. Cannot fin
- 对于dequeueReusableCellWithIdentifier:的理解
- UIImage 读取图片内存优化
- Atitit.ui控件---下拉菜单选择控件的实现select html
- Atitit.ui控件---下拉菜单选择控件的实现select html
- Qt 5.5 beta - Qt Quick Extras - CircularGauge
- AsyncDisplayKit -- ( facebook/新浪微博 ) 优化UI性能
- Unique Binary Search Trees-LeetCode
- poj2284 That Nice Euler Circuit(欧拉定理+枚举)
- How To Use Coordinates To Extract Sequences In Fasta File
- Leetcode: Implement Stack using Queues
- Android ActivityThread(主线程或UI线程)简介
- UIScrollView的contentSize与contentOffset
- jquerr对象的height()/innerHeight()/outerHeight()/outerHeight(true)区别
- hibernate的“ No suitable driver”错误
- 关于UI控件actionbar的详解