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

  • 相关阅读:
    hihoCoder #1176 : 欧拉路·一 (简单)
    228 Summary Ranges 汇总区间
    227 Basic Calculator II 基本计算器II
    226 Invert Binary Tree 翻转二叉树
    225 Implement Stack using Queues 队列实现栈
    224 Basic Calculator 基本计算器
    223 Rectangle Area 矩形面积
    222 Count Complete Tree Nodes 完全二叉树的节点个数
    221 Maximal Square 最大正方形
    220 Contains Duplicate III 存在重复 III
  • 原文地址:https://www.cnblogs.com/lovemargin/p/10533760.html
Copyright © 2011-2022 走看看