App 的启动流程

2021-05-07  本文已影响0人  Abner_XuanYuan

解析 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__);
}
上一篇下一篇

猜你喜欢

热点阅读