1、介紹ide
前面介紹了VC的生命週期,閒着沒事也來捋一捋View的生命週期,簡單用兩個類型的View來監測。一個View純代碼建立,另外一個View使用Xib建立。佈局
二 、代碼測試
MyCodeView: spa
// // MyCodeView.m // 生命週期 // // Created by 夏遠全 on 2019/11/3. // Copyright © 2019 Beijing Huayue Education Technology Co., Ltd. All rights reserved. // #import "MyCodeView.h" @implementation MyCodeView - (instancetype)initWithFrame:(CGRect)frame { NSLog(@"myCodeView-------%s",__func__); return [super initWithFrame:frame]; } - (nullable instancetype)initWithCoder:(NSCoder *)coder { NSLog(@"myCodeView-------%s",__func__); return [super initWithCoder:coder]; } -(void)awakeFromNib { NSLog(@"myCodeView-------%s",__func__); return [super awakeFromNib]; } -(instancetype)init { NSLog(@"myCodeView-------%s",__func__); return [super init]; } - (void)willMoveToSuperview:(nullable UIView *)newSuperview { NSLog(@"myCodeView-------%s",__func__); [super willMoveToSuperview:newSuperview]; } - (void)didMoveToSuperview { NSLog(@"myCodeView-------%s",__func__); [super didMoveToSuperview]; } - (void)willMoveToWindow:(nullable UIWindow *)newWindow { NSLog(@"myCodeView-------%s",__func__); [super willMoveToWindow:newWindow]; } - (void)didMoveToWindow { NSLog(@"myCodeView-------%s",__func__); [super didMoveToWindow]; } - (void)layoutSubviews { NSLog(@"myCodeView-------%s",__func__); [super layoutSubviews]; } - (void)drawRect:(CGRect)rect { NSLog(@"myCodeView-------%s",__func__); [super drawRect:rect]; } -(void)dealloc { NSLog(@"myCodeView-------%s",__func__); } @end
MyXibView: code
// // MyXibView.m // 生命週期 // // Created by 夏遠全 on 2019/11/3. // #import "MyXibView.h" @implementation MyXibView - (instancetype)initWithFrame:(CGRect)frame { NSLog(@"myXibView-------%s",__func__); return [super initWithFrame:frame]; } - (nullable instancetype)initWithCoder:(NSCoder *)coder { NSLog(@"myXibView-------%s",__func__); return [super initWithCoder:coder]; } -(void)awakeFromNib { NSLog(@"myXibView-------%s",__func__); return [super awakeFromNib]; } -(instancetype)init { NSLog(@"myXibView-------%s",__func__); return [super init]; } - (void)willMoveToSuperview:(nullable UIView *)newSuperview { NSLog(@"myXibView-------%s",__func__); [super willMoveToSuperview:newSuperview]; } - (void)didMoveToSuperview { NSLog(@"myXibView-------%s",__func__); [super didMoveToSuperview]; } - (void)willMoveToWindow:(nullable UIWindow *)newWindow { NSLog(@"myXibView-------%s",__func__); [super willMoveToWindow:newWindow]; } - (void)didMoveToWindow { NSLog(@"myXibView-------%s",__func__); [super didMoveToWindow]; } - (void)layoutSubviews { NSLog(@"myXibView-------%s",__func__); [super layoutSubviews]; } - (void)drawRect:(CGRect)rect { NSLog(@"myXibView-------%s",__func__); [super drawRect:rect]; } -(void)dealloc { NSLog(@"myCodeView-------%s",__func__); } @end
三 、註釋對象
init: 經過init實例化時調用,最終會調用initWithFrame,默認使用frame爲CGRectZero initWithFrame: 給出一個frame進行實例化時,會調用 initWithCoder: 經過xib文件建立時,進行反序列化調用 awakeFromNib: 經過xib反序列化後喚醒,初始化調用 willMoveToSuperview: 在視圖即將加入或者移除時調用,若是參數newSuperview有值,則爲即將加入到父視圖,若是爲空值,則即將從父視圖移除 didMoveToSuperview: 在視圖即徹底加入或者移除時調用,若是參數newSuperview有值,則爲徹底加入到父視圖,若是爲空值,則徹底從父視圖移除 willMoveToWindow: 在視圖即將加入或者移除時調用,若是參數newWindow有值,則爲即將加入到窗體,若是爲空值,則即將從窗體移除 didMoveToWindow: 在視圖徹底加入或者移除時調用,若是參數newWindow有值,則爲徹底加入到窗體,若是爲空值,則徹底從窗體移除 layoutSubviews: 對全部的子視圖進行佈局時調用 drawRect: 經過xib文件建立的view在結束佈局後進行繪製,此時調用 dealloc: 當前視圖從父視圖移除並置爲空時,對象銷燬調用
四 、測試blog
MyCodeView:生命週期
- (void)viewDidLoad { [super viewDidLoad]; NSLog(@"建立過程:"); _codeView = [[MyCodeView alloc] init];
[self.view addSubview:_codeView]; } -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { NSLog(@"移除過程:"); [self.codeView removeFromSuperview]; [self setCodeView:nil]; }
2019-11-03 18:53:48.017455+0800 生命週期[7776:582010] 建立過程: 2019-11-03 18:53:48.017693+0800 生命週期[7776:582010] myCodeView--------[MyCodeView init] 2019-11-03 18:53:48.017831+0800 生命週期[7776:582010] myCodeView--------[MyCodeView initWithFrame:] 2019-11-03 18:53:48.018089+0800 生命週期[7776:582010] myCodeView--------[MyCodeView willMoveToSuperview:] 2019-11-03 18:53:48.018259+0800 生命週期[7776:582010] myCodeView--------[MyCodeView didMoveToSuperview] 2019-11-03 18:53:48.030801+0800 生命週期[7776:582010] myCodeView--------[MyCodeView willMoveToWindow:] 2019-11-03 18:53:48.031085+0800 生命週期[7776:582010] myCodeView--------[MyCodeView didMoveToWindow] 2019-11-03 18:53:48.035874+0800 生命週期[7776:582010] myCodeView--------[MyCodeView layoutSubviews] 2019-11-03 18:53:49.043080+0800 生命週期[7776:582010] 移除過程: 2019-11-03 18:53:49.043505+0800 生命週期[7776:582010] myCodeView--------[MyCodeView willMoveToSuperview:] 2019-11-03 18:53:49.043670+0800 生命週期[7776:582010] myCodeView--------[MyCodeView willMoveToWindow:] 2019-11-03 18:53:49.043856+0800 生命週期[7776:582010] myCodeView--------[MyCodeView didMoveToWindow] 2019-11-03 18:53:49.043977+0800 生命週期[7776:582010] myCodeView--------[MyCodeView didMoveToSuperview] 2019-11-03 18:53:49.044246+0800 生命週期[7776:582010] myCodeView--------[MyCodeView dealloc]
MyXibView:rem
- (void)viewDidLoad { [super viewDidLoad]; NSLog(@"建立過程:"); _xibView = [[NSBundle mainBundle] loadNibNamed:@"MyXibView" owner:self options:nil][0]; [self.view addSubview:_xibView]; } -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { NSLog(@"移除過程:"); [self.xibView removeFromSuperview]; [self setXibView:nil]; }
2019-11-03 18:54:37.271733+0800 生命週期[7807:583483] 建立過程: 2019-11-03 18:54:37.272366+0800 生命週期[7807:583483] myXibView--------[MyXibView initWithCoder:] 2019-11-03 18:54:37.272802+0800 生命週期[7807:583483] myXibView--------[MyXibView awakeFromNib] 2019-11-03 18:54:37.273005+0800 生命週期[7807:583483] myXibView--------[MyXibView willMoveToSuperview:] 2019-11-03 18:54:37.273185+0800 生命週期[7807:583483] myXibView--------[MyXibView didMoveToSuperview] 2019-11-03 18:54:37.285532+0800 生命週期[7807:583483] myXibView--------[MyXibView willMoveToWindow:] 2019-11-03 18:54:37.285846+0800 生命週期[7807:583483] myXibView--------[MyXibView didMoveToWindow] 2019-11-03 18:54:37.291993+0800 生命週期[7807:583483] myXibView--------[MyXibView layoutSubviews] 2019-11-03 18:54:37.292182+0800 生命週期[7807:583483] myXibView--------[MyXibView layoutSubviews] 2019-11-03 18:54:37.292659+0800 生命週期[7807:583483] myXibView--------[MyXibView drawRect:] 2019-11-03 18:54:38.979328+0800 生命週期[7807:583483] 移除過程: 2019-11-03 18:54:38.979581+0800 生命週期[7807:583483] myXibView--------[MyXibView willMoveToSuperview:] 2019-11-03 18:54:38.979720+0800 生命週期[7807:583483] myXibView--------[MyXibView willMoveToWindow:] 2019-11-03 18:54:38.979915+0800 生命週期[7807:583483] myXibView--------[MyXibView didMoveToWindow] 2019-11-03 18:54:38.980028+0800 生命週期[7807:583483] myXibView--------[MyXibView didMoveToSuperview] 2019-11-03 18:54:38.980257+0800 生命週期[7807:583483] myCodeView--------[MyXibView dealloc]
五 、總結it