iOS開發(fā)教程之UIView和UIViewController的生命周期詳解
前言
iOS開發(fā)中,創(chuàng)建View常見的兩種方式一個是純代碼,一個是借助于XIB;創(chuàng)建ViewController常見的也有兩種方式一個是純代碼,一個是借助于StoryBoard。
通過交流我發(fā)現(xiàn)很多童鞋對這些概念都很模糊,于是通過實驗寫一篇博客供參考。
重寫View的如下方法
@implementation YFView -(instancetype)init{ self = [super init]; NSLog(@"%s", __func__); return self; } -(instancetype)initWithFrame:(CGRect)frame{ self = [super initWithFrame:(CGRect)frame]; NSLog(@"%s", __func__); return self; } -(instancetype)initWithCoder:(NSCoder *)aDecoder{ self = [super initWithCoder:aDecoder]; NSLog(@"%s", __func__); return self; } -(void)awakeFromNib{ [super awakeFromNib]; NSLog(@"%s", __func__); } -(void)layoutSubviews{ NSLog(@"%s", __func__); } @end
重寫ViewController的如下方法
@implementation YFViewController -(void)loadView{ NSLog(@"%s", __func__); [super loadView]; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. NSLog(@"%s", __func__); self.view.backgroundColor = [UIColor redColor]; } -(void)viewDidAppear:(BOOL)animated{ NSLog(@"%s", __func__); [super viewDidAppear:animated]; } -(instancetype)init{ self = [super init]; NSLog(@"%s", __func__); return self; } -(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ self = [super initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil]; NSLog(@"%s", __func__); return self; } -(instancetype)initWithCoder:(NSCoder *)aDecoder{ self = [super initWithCoder:aDecoder]; NSLog(@"%s", __func__); return self; } -(void)awakeFromNib{ NSLog(@"%s", __func__); [super awakeFromNib]; } @end
結(jié)論總結(jié)
如果控制器是直接通過代碼創(chuàng)建出來的,并且調(diào)用方法為[[YFViewController alloc]init]
創(chuàng)建VC的生命周期為:
-[YFViewController initWithNibName:bundle:] -[YFViewController init] -[YFViewController loadView] -[YFViewController viewDidLoad] -[YFViewController viewDidAppear:]
如果創(chuàng)建控制器時勾選了XIB,那么調(diào)用方法為[[YFViewController alloc]init]
創(chuàng)建VC時的生命周期為:
-[YFViewController initWithNibName:bundle:] -[YFViewController init] -[YFViewController loadView] -[YFViewController viewDidLoad] -[YFViewController viewDidAppear:]
如果是通過SB創(chuàng)建控制器,那么VC的生命周期為:
-[ViewController initWithCoder:] -[ViewController awakeFromNib] -[ViewController loadView] -[ViewController viewDidLoad] -[ViewController viewDidAppear:]
如果純代碼創(chuàng)建UIView,調(diào)用方式為YFView *yfView = [[YFView alloc]init];
那么它的生命周期為:
-[YFView initWithFrame:] -[YFView init] -[YFView layoutSubviews]
如果純代碼創(chuàng)建UIView,調(diào)用方式為YFView *yfView = [[YFView alloc]initWithFrame:[UIScreen mainScreen].bounds];
那么它的生命周期為:
-[YFView initWithFrame:] -[YFView layoutSubviews]
如果通過XIB創(chuàng)建UIView,調(diào)用方式為NSArray *array = [[NSBundle mainBundle]loadNibNamed:@"YFView" owner:nil options:nil];[array lastObject];
那么它的生命周期為:
-[YFView initWithCoder:] -[YFView awakeFromNib] -[YFView layoutSubviews]
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
iOS UITextField最大字符數(shù)和字節(jié)數(shù)的限制詳解
在開發(fā)中我們經(jīng)常遇到這樣的需求:在UITextField或者UITextView中限制用戶可以輸入的最大字符數(shù)。但在UITextView , UITextfield 中有很多坑,網(wǎng)上的方法也很多。但是并不是很全面吧,這里全面進(jìn)行了總結(jié),有需要的朋友們可以參考借鑒,下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。2016-11-11ios7中UIViewControllerBasedStatusBarAppearance作用詳解
這篇文章主要介紹了 ios7中UIViewControllerBasedStatusBarAppearance作用詳解的相關(guān)資料,需要的朋友可以參考下2016-11-11iOS 導(dǎo)航欄無縫圓滑的隱藏 Navigationbar實例代碼
本文通過實例代碼給大家介紹了iOS 導(dǎo)航欄無縫圓滑的隱藏 Navigationbar的效果,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-11-11iOS 檢測網(wǎng)絡(luò)狀態(tài)的兩種方法
一般有Reachability和AFNetworking監(jiān)測兩種方式,都是第三方的框架,下文逐一詳細(xì)給大家講解,感興趣的朋友一起看看吧2016-10-10