iOS程序的启动过程-UIWindow

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函数才返回

程序启动完整过程:

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  

          并且创建箭头所指向控制器并且设置为窗口根控制器并且把窗口显示出来 控制器 根控制器也跟着在屏幕上显示出来

时间: 2024-08-04 18:31:28

iOS程序的启动过程-UIWindow的相关文章

Info.plist和pch文件的作用,UIApplication,iOS程序的启动过程,AppDelegate 方法解释,UIWindow,生命周期方法

转自:http://blog.csdn.net/dwt1220/article/details/29373817 Info.plist常见的设置 建立一个工程后,会在Supporting files文件夹下看到一个“工程名-Info.plist”的文件,该文件对工程做一些运行期的配置,非常重要,不能删除  注:在旧版本Xcode创建的工程中,这个配置文件的名字就叫“Info.plist”  项目中其他Plist文件不能带有“Info”这个字眼,不然会被错认为是传说中非常重要的“Info.plis

iOS开发之iOS程序的启动过程

程序启动的完整过程: (1)main函数 (2)UIApplicationMain * 创建UIApplication对象 * 创建UIApplication的delegate对象 (3)delegate对象开始处理(监听)系统事件(没有storyboard) * 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法 * 在application:didFinishLaunchingWithOptions:中创建UIWind

IOS程序的启动过程

1 main 方法的UIApplicationMain 创建应用程序代理对象(AppDelegate)对象 2 应用程序代理对象(AppDelegate)对象 负责应用程序时间(激活. 进入后台 .进入前台 .终止)的处理 3 根据应用程序的配置加载相对应的StoryBoard 在StoryBoard 中包含了程序界面的设计视图 4 在storyboard中找到第一个要显示的视图 .然后加载它 5 创建视图的试图控制器  .然后调用viewDidLoad进行实现代码的书写

iPhone应用程序的启动过程

Phone的入口函数main,这之后它有是怎样启动应用程序,初始化的呢,这些都是通过 UIApplicationMain 来实现的. 其启动的流程图大致如下图所示: 1 int retVal = UIApplicationMain(argc, argv, nil, nil); 通过上面的语句,创建UIApplication实例.同时,查看应用程序的 Info.plist 文件(该文件记录了一些应用程序的基础信息,比如程序名称,版本,图标等).该文件还包含应用程序资源文件的名称(nib文件,名称用

Android应用程序进程启动过程的源代码分析

文章转载至CSDN社区罗升阳的安卓之旅,原文地址: http://blog.csdn.net/luoshengyang/article/details/6747696 Android 应用程序框架层创建的应用程序进程具有两个特点,一是进程的入口函数是ActivityThread.main,二是进程天然支持Binder进程间通信 机制:这两个特点都是在进程的初始化过程中实现的,本文将详细分析Android应用程序进程创建过程中是如何实现这两个特点的. Android应用程序框架层创建的应用程序进程

MFC程序的启动过程,很清楚,但仍有待改进

原文出自:http://blog.csdn.net/yuvmen/article/details/5877271 了解MFC程序的启动过程,对于初学者来讲,了学习MFC很有帮助:对于不常用VC的人来说,过一段时间就会忘记.还是来记下来,方便以后查阅. 1.创建Application object对象theApp 程序一开始生产一个(且只有一个)Application object对象theApp,也即一个CWinApp对象,这个全局对象一产生,便执行其构造函数,因为并没有定义CMyWinApp构

iOS 探索:iOS程序的Build过程

注1:本文由破船译自  The Build Process . 注2: 1 2 3 4 5 6 7 8 9 10 本文将轻度解密Xcode build日志,还原iOS程序build的过程. 另外将介绍如何对build过程的控制,进而定制出自己希望的流程, 例如通过Build phase的定制,给app icon打水印(包括版本号和日期). 通过对工程文件的解读,为你揭开工程文件(.pbxproj)与 build settings的关系.这对于解决工程文件的merge冲突非常有帮助. PS:实际上

iOS程序的启动原理

1.先执行main函数,main内部会调用UIApplicationMain函数 2.UIApplicationMain函数里面做了什么事情: 1> 创建UIApplication对象 2> 创建UIApplication的delegate对象—–PYAppDelegate 3> 开启一个消息循环 每监听到对应的系统事件时,就会通知AppDelegate 4> 为应用程序创建一个UIWindow对象(继承自UIView),设置为AppDelegate的window属性 5> 

程序的启动过程

WIN32程序启动过程 第一步:操作系统首先创建响应的进程并分配私有的进程空间,然后操作系统的加载器负责把可执行文件的数据段和代码段映射到进程的虚拟内容空间中. 第二步:加载器读入可执行程序的导入符号表,根据这些符号表可以查找出该可执行程序所有依赖的动态链接库. 第三步:加载器针对该程序依赖的每一个动态链接库调用LoadLibrary. 查找对应的动态库文件,加载器为该动态链接库确定一个合适的基地址.如果该基地址和动态链接库希望加载的基地址不同,加载器还要为该库做rebase,然后把整个动态链接