接上次VC的生命周期
XibView的加载过程
//CodeVC代码
#import "CodeInitViewController.h"
#import "XibInitViewController.h"
#import "CodeView.h"
#import "XibView.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];
NSArray *viewArray = [[NSBundle mainBundle] loadNibNamed:@"XibView" owner:nil options:nil];
XibView *view = [viewArray firstObject];
[self.view addSubview:view];
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{
//通过xib创建
XibInitViewController *xibVc = [[XibInitViewController alloc] init];
[self.navigationController pushViewController:xibVc animated:YES];
}
@end
//XibView.m代码
#import "XibView.h"
@implementation XibView
- (instancetype)initWithCoder:(NSCoder *)coder
{
NSLog(@"XibView %s ",__func__);
if (self = [super initWithCoder:coder]) {
}
return self;
}
- (instancetype)init {
NSLog(@"XibView %s ",__func__);
return [super init];
}
- (instancetype)initWithFrame:(CGRect)frame {
NSLog(@"XibView %s ",__func__);
return [super initWithFrame:frame];
}
-(void)awakeFromNib {
NSLog(@"XibView %s ",__func__);
[super awakeFromNib];
}
@end
打印结果
2020-05-27 06:47:14.567548+0800 OCTestFirst[1823:43207] CodeVC +[CodeInitViewController initialize]
2020-05-27 06:47:14.567796+0800 OCTestFirst[1823:43207] CodeVC +[CodeInitViewController alloc]
2020-05-27 06:47:14.567949+0800 OCTestFirst[1823:43207] CodeVC -[CodeInitViewController init]
2020-05-27 06:47:14.568061+0800 OCTestFirst[1823:43207] CodeVC -[CodeInitViewController initWithNibName:bundle:]
2020-05-27 06:47:14.570756+0800 OCTestFirst[1823:43207] XibView -[XibView initWithCoder:]
2020-05-27 06:47:14.571228+0800 OCTestFirst[1823:43207] XibView -[XibView awakeFromNib]
2020-05-27 06:47:14.571970+0800 OCTestFirst[1823:43207] CodeVC -[CodeInitViewController loadView]
2020-05-27 06:47:14.572530+0800 OCTestFirst[1823:43207] CodeVC -[CodeInitViewController viewDidLoad]
2020-05-27 06:47:14.573285+0800 OCTestFirst[1823:43207] boardVC -[ViewController viewWillDisappear:]
2020-05-27 06:47:14.574013+0800 OCTestFirst[1823:43207] CodeVC -[CodeInitViewController viewWillAppear:]
2020-05-27 06:47:14.586452+0800 OCTestFirst[1823:43207] CodeVC -[CodeInitViewController viewWillLayoutSubviews]
2020-05-27 06:47:14.586631+0800 OCTestFirst[1823:43207] CodeVC -[CodeInitViewController viewDidLayoutSubviews]
2020-05-27 06:47:15.092355+0800 OCTestFirst[1823:43207] boardVC -[ViewController viewDidDisappear:]
2020-05-27 06:47:15.092634+0800 OCTestFirst[1823:43207] CodeVC -[CodeInitViewController viewDidAppear:]
如果VC中的loadView写为
- (void)loadView {
[super loadView];
self.view = [[XibView alloc]init];
NSLog(@"CodeVC %s ",__func__);
}
则打印结果为
2020-05-27 06:51:26.097517+0800 OCTestFirst[1892:45638] XibView -[XibView init]
2020-05-27 06:51:26.097687+0800 OCTestFirst[1892:45638] XibView -[XibView initWithFrame:]
2020-05-27 06:51:26.098198+0800 OCTestFirst[1892:45638] CodeVC -[CodeInitViewController loadView]
2020-05-27 06:51:26.098686+0800 OCTestFirst[1892:45638] CodeVC -[CodeInitViewController viewDidLoad]
2020-05-27 06:51:26.099067+0800 OCTestFirst[1892:45638] boardVC -[ViewController viewWillDisappear:]
2020-05-27 06:51:26.099518+0800 OCTestFirst[1892:45638] CodeVC -[CodeInitViewController viewWillAppear:]
2020-05-27 06:51:26.113316+0800 OCTestFirst[1892:45638] CodeVC -[CodeInitViewController viewWillLayoutSubviews]
2020-05-27 06:51:26.113521+0800 OCTestFirst[1892:45638] CodeVC -[CodeInitViewController viewDidLayoutSubviews]
2020-05-27 06:51:26.623169+0800 OCTestFirst[1892:45638] boardVC -[ViewController viewDidDisappear:]
2020-05-27 06:51:26.623613+0800 OCTestFirst[1892:45638] CodeVC -[CodeInitViewController viewDidAppear:]
总结:
1、通过xib文件来自定义控件是,VC中调用view用bundle调用时则会走initWithCoder,awakeFromNib方法
如果VC中调用view 用alloc,init调用 则走init,initWithFrame:方法;
2、如果不指定自定义View的Custom class为同名类,则不会执行initWithCoder,awakeFromNib方法