美文网首页
IOS 程序启动过程

IOS 程序启动过程

作者: dicesc | 来源:发表于2016-07-17 15:27 被阅读166次

应用程序启动过程:

  1. 找到main.m 文件
  2. 执行main函数
  3. 执行UIApplicationMain()函数
  1. 实例化UIApplication对象 --> 继承自 UIApplication
  1. 设置UIApplication的代理 --> AppDelegate 如果需要自定义需要 遵守 UIApplicationDelegate

  2. 开启一个主循环 --> 监听用户的交互事件 --> 直到应用程序结束之后才会停止

  3. 检测是否存在sb

  • 如果存在

    1. 实例化一个UIWindow对象
    2. 实例化箭头所指的控制器器
    3. 实例化控制器的view和子view
    4. 设置控制器成为window的根控制器
    5. 让window 可见

    调用AppDelegate的方法
    didFinishLaunchWithOpitons: 完成启动

  • 如果不存在sb
    直接调用AppDelegate的方法
    didFinishLaunchWithOpitons: 完成启动
    didFinishLaunchWithOpitons:

    1. 实例化UIWindow, 赋值 给 self.window
    2. 实例化一个ViewController
    3. 设置self.window.roothViewController =

代码示例

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

  1. 实例化一个window
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor whiteColor];

  2. 实例化控制器

    // 如果存在和类名相同的xib , 通过 alloc init 方法,内部会优先加载xib
    TestViewController *controller = [[TestViewController alloc] init];

  3. 设置window的根控制器
    self.window.rootViewController = controller;

  4. 让window成为主窗口并可见
    [self.window makeKeyAndVisible];
    return YES;
    }


创建控制器的多种方式

/**
第一种方式: 使用class 创建控制器

 ViewController *controller = [[ViewController alloc] init];
 */

/**
 第二种方式:  使用storyboard
 
 // 实例化 storyboard对象
 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
 
 // 取出storyboard中的 控制器 , 使用这种方式实例化控制器的时候, 箭头必须在,如果不存在, 就会加载不到控制器
 UIViewController *controller = [storyboard instantiateInitialViewController];
 
 */

/**
 第三种: 通过 storyboard 的 storyboard ID
 
 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
 
 UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"bigfang"];
 */

/**
 第四种: 加载xib
 
 UIViewController *controller = [[NSBundle mainBundle] loadNibNamed:@"LoadXib" owner:nil options:nil].lastObject;
 */

/**
 第五种: 实例化xib
 
 在xib中没有view存在
 
 reason: '-[UIViewController _loadViewFromNibNamed:bundle:] was unable to load a nib named "IntinalTest"'
 
 view没有进行关联
 
 reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "IntinalTest" nib but the view outlet was not set.'
 
 
 UIViewController *controller = [[UIViewController alloc] initWithNibName:@"IntinalTest" bundle:nil];
 
 */

/**
 第六种: 和同类名xib
 
 
 // 如果存在和类名相同的xib , 通过 alloc init 方法,内部会优先加载xib
 TestViewController *controller = [[TestViewController alloc] init];
 */

相关文章

  • 深入理解iOS App的启动过程

    前言 参考资料:深入理解iOS App的启动过程iOS 应用程序启动过程及原理总结iOS:App启动过程详解(不同...

  • iOS 程序 main函数之前发生什么

    主要参考:iOS程序启动->dyld加载->runtime初始化 过程iOS 程序 main 函数之前发生了什么 ...

  • iOS程序启动原理(下)

    接上篇 iOS程序启动原理(上) 下图是一个iOS程序启动的完整过程 main函数中执行了一个UIApplicat...

  • iOS程序启动-Dyld流程解析

    iOS程序启动流程概览 什么是Dyld? 它跟程序的启动有什么关系? Dyld是动态库链接器。在程序启动过程中负责...

  • UI部分-程序概要

    iOS程序概要 1. 程序的启动过程 iOS程序就是从main函数开始执行的,但是在main函数中我们其实只能看到...

  • iOS 程序启动过程

    概述 我们一般说的 APP 的启动是从 main 函数开始的,但在 main 函数执行前,程序已经执行了许多事情 ...

  • iOS程序启动过程

    程序启动的完整过程 1.main函数 2.UIApplicationMain * 创建UIApplication对...

  • iOS程序启动过程

    1.main函数。 2.UIApplicationMain · 创建UIApplication对象 ·创建UIAp...

  • IOS 程序启动过程

    应用程序启动过程: 找到main.m 文件 执行main函数 执行UIApplicationMain()函数 实例...

  • iOS程序启动过程

    一、启动完整过程 1.main函数main.m 2.UIApplicationMain 创建UIApplicati...

网友评论

      本文标题:IOS 程序启动过程

      本文链接:https://www.haomeiwen.com/subject/kltpjttx.html