zoukankan      html  css  js  c++  java
  • iOS app启动流程

    最近看了些Runtime Runloop的一些知识.边看边摸索.看到群里有人在问 一些面试题.其中就提到了app的启动流程.

    所以这里也研究小结一下,以供自己学习备用.

    1.项目要运行,就要有入口. OC语言的入口就在main.m 文件.下面看main.m里都有什么可以窥探的.

    int main(int argc, char * argv[]) {
        @autoreleasepool {
            return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
        }
    }

    在自动释放池里我们可以看到里面就一行代码

    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

    这行代码我们手打一下.可以看到传的参数

    UIApplicationMain(<#int argc#>, <#char * _Nonnull * _Null_unspecified argv#>, <#NSString * _Nullable principalClassName#>, <#NSString * _Nullable delegateClassName#>)

    下面我们一步步解析这句关键的代码如何启动App

    UIApplicationMain 就是OC的入门点. 里面传递了四个参数:

    argc 是一个int参数

    argv 是一个char 参数

    principalClassName 主程序类名( 当值为 nil 时,默认是UIApplication)

    delegateClassName 代理类名 默认就是常见的AppDelegate类

    在上面的传参时候用到了NSStringFromClass 方法.

    NSStringFromClass 是将类名转化为字符串的转化函数.与此类似的还有字符串转化类名的NSClassFromString.

    2.设定了对象和代理之后就是NSRunloop 来保持程序一直运行处理事件(详情请看上一篇说的runloop文章)

    3.接下来就是info.plist文件.检查是否通过main.storyboard加载指定的控制器. 把新创建的控制器作为窗口的跟控制器,让窗口显示出来.如果没有则会在下面方法中创建UIWindow 来作为主窗口

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    //创建UIWindow 来作为主窗口
    
    return YES;
    
    }

    4.最后通过执行程序AppDelegate的代理.程序完成启动

  • 相关阅读:
    JAVA内部类详解
    表、栈和队列
    大型网站架构演化<二>
    eclipse中build path 中JDK与java compiler compliance level的问题(转)
    XFire构建服务端Service的两种方式
    SpringMVC简单例子
    Mybatis
    java静态代码块 类加载顺序问题。
    Tomcat6.0数据源配置
    解析xml的几种方式
  • 原文地址:https://www.cnblogs.com/lovemargin/p/10533760.html
Copyright © 2011-2022 走看看