iOS核心笔记——iOS应用程序启动原理

1、iOS应用程序启动示例图:


2、应用程序启动原理:

2-1、不通过storyboard文件启动:
  1. 执行main函数;
  2. 执行main函数中的UIApplicationMain函数,创建UIApplication对象,创建ApplicationDelegate对象并将其设置为UIApplication对象的代理;
  3. 程序启动完毕,开启消息循环(Main RunLoop)、监听事件并调用注册方法;接着调用代理的application:didFinishLaunchingWithOptions:方法;在该方法中手动创建UIWindow对象设置为代理的window属性;
  4. 创建控制器,将控制器设置为window的根控制器(rootViewController),此时,控制器中的View会自动加载到window上;
  5. 将创建好的window设置为主窗口并显示(调用window的makeKeyAndVisible方法)。

示例程序

1./**2. 应用程序启动完毕3. */4.- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {5.    // 1. 创建窗口6.    UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];7.    self.window = window;8.9.    // 2. 创建窗口的根控制器10.    UIViewController *vc = [[UIViewController alloc] init];11.    vc.view.backgroundColor = [UIColor redColor];12.    self.window.rootViewController = vc;13.14.    // 3. 成为主窗口并显示15.    [self.window makeKeyAndVisible];16.17.    return YES;18.}

2-2、通过storyboard文件启动:
官方文档解释说明:

  1. 执行main函数;
  2. 执行main函数中的UIApplicationMain函数,创建UIApplication对象,创建ApplicationDelegate对象并将其设置为UIApplication对象的代理;
  3. 自动创建好UIWindow对象;
  4. 检索info.plist文件中最重要的storyboard(通常为Main storyboard)信息,根据info.plist提供的信息,加载storyboard文件,自动创建好控制器和控制器的View;
  5. 将创建好的控制器设置为window对象的根控制器(rootViewController)并显示窗口。
  6. 应用程序启动后,会开启应用程序的Main Runloop(事件循环),监听事件并调用注册的方法(首先会在程序完毕后调用delegate对象的application:didFinishLaunchingWithOptions:方法);

3、UIApplicationMain()函数:

官方文档解释说明:

3-1、UIApplicationMain()参数使用说明:
  1. argc:使用main函数中的argc即可;
  2. argv:使用main函数的argv即可;
  3. principalClassName:指定应用程序类名(app的象征),该类必须是UIApplication(或子类),如果为nil,则用UIApplication类作为默认值;

    备注:传入应用程序对象类名,nil == NSStringFromClass([UIApplication class]) == @"UIApplication"

  4. delegateClassName:指定应用程序的代理类,UIApplicationDelegate协议中定义的方法,在该类中实现。

3-2、UIApplicationMain()功能:
  1. 根据principalClassName创建UIApplication对象;
  2. 根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性;
  3. UIApplicationMain()函数开启一个“死循环”(事件循环), 所以程序不会退出, 我们可以任意使用。在这个“死循环”(事件循环)中程序不断监听用户的各种事件, 依次处理(依靠”事件队列”实现)。

备注:在消息循环中不断监测消息队列中是否有新的事件(队列是先进先出,事件队列的目的是为了提高性能),消息循环可以简单理解为一个死循环;当系统有事件被触发,事件所执行的方法会放入消息队列中,消息循环的作用就是不停的去消息 队列中看有没有新的消息,有就执行,用户感觉不到等待的时间。


3-3、UIApplicationMain()函数退出:

备注:程序正常退出时UIApplicationMain函数才返回。


4、程序启动四大对象关系示例图:

时间: 2024-10-12 22:50:10

iOS核心笔记——iOS应用程序启动原理的相关文章

iOS核心笔记——iOS通知机制

1.iOS通知机制: 1-1.iOS通知发布者.通知中心.监听器之间的关系: 如下图所示: 2.通知(NSNotification)简介: 3.通知中心(NSNotificationCenter) 3-1.每个应用程序只有一个通知中心对象(单例对象): 4.发布通知: 4-1.对象在自己需要的某个时候使用通知类(NSNotification)创建通知对象后让通知中心帮忙发布通知: 1.可以在对象A需要使用通知的某个位置,直接让通知中心帮忙发送的时候将通知中的一系列信息通过通知中心提供的方法创建通

iOS程序启动原理

程序启动原理 掌握 Info.plist和pch文件的作用 UIApplication的常见使用 AppDelegate的代理方法 UIApplication.AppDelegate.UIWindow.UIViewController的关系 iOS程序的完整启动过程 … Info.plist常见的设置 建立一个工程后,会在Supporting files文件夹下看到一个“工程名-Info.plist”的文件,该文件对工程做一些运行期的配置,非常重要,不能删除 在旧版本Xcode创建的工程中,这个

iOS的程序启动原理

一.程序启动原理 1.首先找到程序入口,执行main函数 main -> UIApplicationMain 2.UIApplicationMain底层做事情 1> 创建UIApplication对象 2> 创建UIApplication的代理对象,而且给UIApplication对象代理属性赋值 3> 开启主运行循环,作用接收事件,让程序一直运行 4> 加载info.plist,判断下有木有指定main.storyboard,如果指定就会去加载 3.创建UIWindow 1

iOS开发 - App程序启动原理

Info.plist和pch文件的作用 建立一个工程后,会在Supporting files文件夹下看到一个"工程名-Info.plist"的文件,该文件对工程做一些运行期的配置,非常重要,不能删除 在旧版本Xcode创建的工程中,这个配置文件的名字就叫"Info.plist" 项目中其他Plist文件不能带有"Info"这个字眼,不然会被错认为是传说中非常重要的"Info.plist" 项目中还有一个InfoPlist.st

详解 IOS 7.1 程序启动原理

程序都是从Main方法入口的 IOS 也不例外 int main(int argc,char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } 在IOS 里main 方法里有个UIApplicationMain里面带有4个参数 param 1: argc : 对应argv的参数数量 param 2: argv: 

iOS核心笔记——UICollectionView-辅助视图

iOS核心笔记--UICollectionView-辅助视图 1.UICollectionView辅助视图: ?了解:UICollectionView中的头部视图.尾部视图都是使用注册机制 + 重用机制,提高程序的执行效率,其头尾部视图类型均为:UICollectionReusableView.注册辅助视图时使用字符串区分注册的视图为头部还是尾部视图,其区分字符串为:UICollectionElementKindSectionHeader(头部视图).UICollectionElementKin

iOS核心笔记——UICollectionView-布局对象

iOS核心笔记--UICollectionView-布局对象 1.UICollectionView布局对象: 1-1.UICollectionViewLayout: ?了解:1.UICollectionViewLayout没有itemSize属性,而collectionView的cell的大小不能为0或者小于0:所以,通常collectionView使用其子类UICollectionViewFlowLayout布局cell. ?了解:2.UICollectionViewLayout中声明了布局可

程序启动原理

?建立一个工程后,会在Supporting files文件夹下看到一个"工程名-Info.plist"的文件,该文件对工程做一些运行期的配置,非常重要,不能删除 ?在旧版本Xcode创建的工程中,这个配置文件的名字就叫"Info.plist" ?项目中其他Plist文件不能带有"Info"这个字眼,不然会被错认为是传说中非常重要的"Info.plist" ?项目中还有一个InfoPlist.strings的文件,跟Info.p

iOS程序启动原理是什么

当刚开始学习ios开发的时候,我们学会做的第一件事就是创建一个新的项目.每次我都会好奇,为什么我们选择创建一个Single View Application项目的时候,什么代码都不用敲就可以在模拟器上运行程序了.要解答这个问题需要明白一点程序的启动原理,看完之后你就会明白. 首先,建立一个Single View Application项目以方便我们的研究.可以明确的是,不论是C语言还是Objiective-C语言程序,程序运行的入口都是main函数.所以我们从main函数开始入手. 创建新项目