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的代理.程序完成启动

  • 相关阅读:
    第三天 moyax
    mkfs.ext3 option
    write file to stroage trigger kernel warning
    download fomat install rootfs script
    custom usb-seriel udev relus for compatible usb-seriel devices using kermit
    Wifi Troughput Test using iperf
    learning uboot switch to standby system using button
    learning uboot support web http function in qca4531 cpu
    learngin uboot design parameter recovery mechanism
    learning uboot auto switch to stanbdy system in qca4531 cpu
  • 原文地址:https://www.cnblogs.com/lovemargin/p/10533760.html
Copyright © 2011-2022 走看看