UIViewController添加addChildViewController過程

父控制器 CodeInitViewController.m


#import "CodeInitViewController.h"
#import "CodeInitChildViewController.h"

@interface CodeInitViewController ()

@end

@implementation CodeInitViewController


+ (void)load {
    [super load];
    NSLog(@"CodeVC     %s     ",__func__);
}

+ (void)initialize
{
    [super initialize];
    NSLog(@"CodeVC     %s     ",__func__);
}

+ (instancetype)alloc {
    NSLog(@"CodeVC     %s     ",__func__);
   return [super alloc];
}


- (instancetype)initWithCoder:(NSCoder *)coder
{
     NSLog(@"CodeVC     %s     ",__func__);
    
    return [super initWithCoder:coder];
}

- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
     NSLog(@"CodeVC     %s     ",__func__);
    return [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
}

- (instancetype)init
{
    NSLog(@"CodeVC     %s     ",__func__);
    return [super init];
}

- (void)loadView {
    
    [super loadView];
    NSLog(@"CodeVC     %s     ",__func__);
}
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor greenColor];
    NSLog(@"CodeVC     %s     ",__func__);
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
     NSLog(@"CodeVC     %s     ",__func__);
}

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    NSLog(@"CodeVC     %s     ",__func__);
}

- (void)viewWillDisappear:(BOOL)animated {
     [super viewWillDisappear:animated];
    NSLog(@"CodeVC     %s     ",__func__);
}

- (void)viewDidDisappear:(BOOL)animated {
     [super viewDidDisappear:animated];
    NSLog(@"CodeVC     %s     ",__func__);
}

- (void)viewWillLayoutSubviews {
     [super viewWillLayoutSubviews];
    NSLog(@"CodeVC     %s     ",__func__);
}


- (void)viewDidLayoutSubviews {
      [super viewDidLayoutSubviews];
    NSLog(@"CodeVC     %s     ",__func__);
}

-(void)dealloc {
    NSLog(@"CodeVC     %s     ",__func__);
}


- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    CodeInitChildViewController *chld = [[CodeInitChildViewController alloc]init];
    [self addChildViewController:chld];
//    [self.view addSubview:chld.view];
        
}
@end

子控制器CodeInitChildViewController.m


#import "CodeInitChildViewController.h"

@interface CodeInitChildViewController ()

@end

@implementation CodeInitChildViewController


+ (void)load {
    [super load];
    NSLog(@"CodeInitChildViewController     %s     ",__func__);
}

+ (void)initialize
{
    [super initialize];
    NSLog(@"CodeInitChildViewController     %s     ",__func__);
}

+ (instancetype)alloc {
    NSLog(@"CodeInitChildViewController     %s     ",__func__);
   return [super alloc];
}


- (instancetype)initWithCoder:(NSCoder *)coder
{
     NSLog(@"CodeInitChildViewController     %s     ",__func__);
    
    return [super initWithCoder:coder];
}

- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
     NSLog(@"CodeInitChildViewController     %s     ",__func__);
    return [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
}

- (instancetype)init
{
    NSLog(@"CodeInitChildViewController     %s     ",__func__);
    return [super init];
}

- (void)loadView {
    
    [super loadView];

    NSLog(@"CodeInitChildViewController     %s     ",__func__);
}
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor redColor];
    NSLog(@"CodeInitChildViewController     %s     ",__func__);
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
     NSLog(@"CodeInitChildViewController     %s     ",__func__);
}

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    NSLog(@"CodeInitChildViewController     %s     ",__func__);
}

- (void)viewWillDisappear:(BOOL)animated {
     [super viewWillDisappear:animated];
    NSLog(@"CodeInitChildViewController     %s     ",__func__);
}

- (void)viewDidDisappear:(BOOL)animated {
     [super viewDidDisappear:animated];
    NSLog(@"CodeInitChildViewController     %s     ",__func__);
}

- (void)viewWillLayoutSubviews {
     [super viewWillLayoutSubviews];
    NSLog(@"CodeInitChildViewController     %s     ",__func__);
}


- (void)viewDidLayoutSubviews {
      [super viewDidLayoutSubviews];
    NSLog(@"CodeInitChildViewController     %s     ",__func__);
}

-(void)dealloc {
    NSLog(@"CodeInitChildViewController     %s     ",__func__);
}

@end

打印結果

.729275+0800 OCTestFirst[17968:374972] CodeVC     +[CodeInitViewController initialize]
2020-06-19 16:10:47.730436+0800  CodeVC     +[CodeInitViewController alloc]
2020-06-19 16:10:47.730578+0800  CodeVC     -[CodeInitViewController init]
2020-06-19 16:10:47.730686+0800  CodeVC     -[CodeInitViewController initWithNibName:bundle:]
2020-06-19 16:10:47.734282+0800  CodeVC     -[CodeInitViewController loadView]
2020-06-19 16:10:47.734583+0800  CodeVC     -[CodeInitViewController viewDidLoad]
2020-06-19 16:10:47.734883+0800  CodeVC     -[CodeInitViewController viewWillAppear:]
2020-06-19 16:10:47.745975+0800  CodeVC     -[CodeInitViewController viewWillLayoutSubviews]
2020-06-19 16:10:47.746157+0800  CodeVC     -[CodeInitViewController viewDidLayoutSubviews]
2020-06-19 16:10:48.250317+0800  CodeVC     -[CodeInitViewController viewDidAppear:]
2020-06-19 16:10:58.551051+0800  CodeInitChildViewController     +[CodeInitChildViewController initialize]
2020-06-19 16:10:58.551452+0800  CodeInitChildViewController     +[CodeInitChildViewController alloc]
2020-06-19 16:10:58.551782+0800  CodeInitChildViewController     -[CodeInitChildViewController init]
2020-06-19 16:10:58.552386+0800  CodeInitChildViewController     -[CodeInitChildViewController initWithNibName:bundle:]

發現只添加子控制器 [self addChildViewController:chld];不添加子控制器的view [self.view addSubview:chld.view];時,只初始化了子控制器
當添加了 [self.view addSubview:chld.view] 這句話打印結果爲

2020-06-19 16:18:03.534741+0800  CodeVC     +[CodeInitViewController initialize]
2020-06-19 16:18:03.539440+0800  CodeVC     +[CodeInitViewController alloc]
2020-06-19 16:18:03.540099+0800  CodeVC     -[CodeInitViewController init]
2020-06-19 16:18:03.540374+0800  CodeVC     -[CodeInitViewController initWithNibName:bundle:]
2020-06-19 16:18:03.542380+0800  CodeVC     -[CodeInitViewController loadView]
2020-06-19 16:18:03.542834+0800  CodeVC     -[CodeInitViewController viewDidLoad]
2020-06-19 16:18:03.543790+0800  CodeVC     -[CodeInitViewController viewWillAppear:]
2020-06-19 16:18:03.554139+0800  CodeVC     -[CodeInitViewController viewWillLayoutSubviews]
2020-06-19 16:18:03.554348+0800  CodeVC     -[CodeInitViewController viewDidLayoutSubviews]
2020-06-19 16:18:04.059900+0800  CodeVC     -[CodeInitViewController viewDidAppear:]
2020-06-19 16:18:07.505517+0800  CodeInitChildViewController     +[CodeInitChildViewController initialize]
2020-06-19 16:18:07.505709+0800  CodeInitChildViewController     +[CodeInitChildViewController alloc]
2020-06-19 16:18:07.505812+0800  CodeInitChildViewController     -[CodeInitChildViewController init]
2020-06-19 16:18:07.505897+0800  CodeInitChildViewController     -[CodeInitChildViewController initWithNibName:bundle:]
2020-06-19 16:18:07.506375+0800  CodeInitChildViewController     -[CodeInitChildViewController loadView]
2020-06-19 16:18:07.506610+0800  CodeInitChildViewController     -[CodeInitChildViewController viewDidLoad]
2020-06-19 16:18:07.506746+0800  CodeInitChildViewController     -[CodeInitChildViewController viewWillAppear:]
2020-06-19 16:18:07.507746+0800  CodeVC     -[CodeInitViewController viewWillLayoutSubviews]
2020-06-19 16:18:07.507894+0800  CodeVC     -[CodeInitViewController viewDidLayoutSubviews]
2020-06-19 16:18:07.508277+0800  CodeInitChildViewController     -[CodeInitChildViewController viewWillLayoutSubviews]
2020-06-19 16:18:07.508868+0800  CodeInitChildViewController     -[CodeInitChildViewController viewDidLayoutSubviews]
2020-06-19 16:18:07.510345+0800  CodeInitChildViewController     -[CodeInitChildViewController viewDidAppear:]

當添加了 [self.view addSubview:chld.view]之後,發現增加了loadView,viewDidLoad, viewWillAppear, 而且重新調用了父類的viewWillLayoutSubviews, viewDidLayoutSubviews,再調用自己的viewWillLayoutSubviews,viewDidLayoutSubviews再調用viewDidAppear

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章