美文网首页
App 的启动流程

App 的启动流程

作者: Abner_XuanYuan | 来源:发表于2021-05-07 18:05 被阅读0次

    解析 Info.plist
    加载相关信息,例如闪屏。
    沙箱(SandBox)建立、权限检查。
    Mach-O 加载
    寻找合适当前 CPU 类别的部分。
    加载所有依赖的 Mach-O 文件(递归调用 Mach-O 加载的方法)。
    定位内部、外部指针引用,例如字符串、函数等。
    执行声明为 attribute((constructor)) 的 C 函数。
    加载分类(Category)中的方法。
    C++ 静态对象加载、调用 Objc 的 +load 函数。
    程序执行
    调用 main()
    调用 UIApplicationMain()
    调用 applicationWillFinishLaunching 代理方法

    APP 启动.png

    解析
    1 程序入口
    进入 main 函数,设置 AppDelegate 为函数的代理

    2 程序完成加载
    [AppDelegate application:didFinishLaunchingWithOptions:]

    3 创建window窗口

    4 程序被激活
    [AppDelegate applicationDidBecomeActive:]

    5 当点击 command+H 时(针对模拟器,手机是当点击home键)
    程序取消激活状态
    [AppDelegate applicationWillResignActive:];
    程序进入后台
    [AppDelegate applicationDidEnterBackground:];

    6 点击进入工程
    程序进入前台
    [AppDelegate applicationWillEnterForeground:]
    程序被激活
    [AppDelegate applicationDidBecomeActive:];

    控制器的生命周期
    
    // 非storyBoard(xib或非xib)都走这个方法
    - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
        NSLog(@"%s", __FUNCTION__);
        if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        
        }
        return self;
    }
    
    // 如果连接了串联图storyBoard 走这个方法
    - (instancetype)initWithCoder:(NSCoder *)aDecoder {
         NSLog(@"%s", __FUNCTION__);
        if (self = [super initWithCoder:aDecoder]) {
            
        }
        return self;
    }
    
    // xib 加载 完成
    - (void)awakeFromNib {
        [super awakeFromNib];
         NSLog(@"%s", __FUNCTION__);
    }
    
    // 加载视图(默认从nib)
    - (void)loadView {
        NSLog(@"%s", __FUNCTION__);
        self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
        self.view.backgroundColor = [UIColor redColor];
    }
    
    //视图控制器中的视图加载完成,viewController自带的view加载完成
    - (void)viewDidLoad {
        NSLog(@"%s", __FUNCTION__);
        [super viewDidLoad];
    }
    
    
    //视图将要出现
    - (void)viewWillAppear:(BOOL)animated {
        NSLog(@"%s", __FUNCTION__);
        [super viewWillAppear:animated];
    }
    
    // view 即将布局其 Subviews
    - (void)viewWillLayoutSubviews {
        NSLog(@"%s", __FUNCTION__);
        [super viewWillLayoutSubviews];
    }
    
    // view 已经布局其 Subviews
    - (void)viewDidLayoutSubviews {
        NSLog(@"%s", __FUNCTION__);
        [super viewDidLayoutSubviews];
    }
    
    //视图已经出现
    - (void)viewDidAppear:(BOOL)animated {
        NSLog(@"%s", __FUNCTION__);
        [super viewDidAppear:animated];
    }
    
    //视图将要消失
    - (void)viewWillDisappear:(BOOL)animated {
        NSLog(@"%s", __FUNCTION__);
        [super viewWillDisappear:animated];
    }
    
    //视图已经消失
    - (void)viewDidDisappear:(BOOL)animated {
        NSLog(@"%s", __FUNCTION__);
        [super viewDidDisappear:animated];
    }
    
    //出现内存警告  //模拟内存警告:点击模拟器->hardware-> Simulate Memory Warning
    - (void)didReceiveMemoryWarning {
        NSLog(@"%s", __FUNCTION__);
        [super didReceiveMemoryWarning];
    }
    
    // 视图被销毁
    - (void)dealloc {
        NSLog(@"%s", __FUNCTION__);
    }
    

    相关文章

      网友评论

          本文标题:App 的启动流程

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