iOS开发教程之UIView和UIViewController的生命周期详解
程序员文章站
2023-12-18 18:28:22
前言
ios开发中,创建view常见的两种方式一个是纯代码,一个是借助于xib;创建viewcontroller常见的也有两种方式一个是纯代码,一个是借助于storybo...
前言
ios开发中,创建view常见的两种方式一个是纯代码,一个是借助于xib;创建viewcontroller常见的也有两种方式一个是纯代码,一个是借助于storyboard。
通过交流我发现很多童鞋对这些概念都很模糊,于是通过实验写一篇博客供参考。
重写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
结论总结
如果控制器是直接通过代码创建出来的,并且调用方法为[[yfviewcontroller alloc]init]
创建vc的生命周期为:
-[yfviewcontroller initwithnibname:bundle:] -[yfviewcontroller init] -[yfviewcontroller loadview] -[yfviewcontroller viewdidload] -[yfviewcontroller viewdidappear:]
如果创建控制器时勾选了xib,那么调用方法为[[yfviewcontroller alloc]init]
创建vc时的生命周期为:
-[yfviewcontroller initwithnibname:bundle:] -[yfviewcontroller init] -[yfviewcontroller loadview] -[yfviewcontroller viewdidload] -[yfviewcontroller viewdidappear:]
如果是通过sb创建控制器,那么vc的生命周期为:
-[viewcontroller initwithcoder:] -[viewcontroller awakefromnib] -[viewcontroller loadview] -[viewcontroller viewdidload] -[viewcontroller viewdidappear:]
如果纯代码创建uiview,调用方式为yfview *yfview = [[yfview alloc]init];
那么它的生命周期为:
-[yfview initwithframe:] -[yfview init] -[yfview layoutsubviews]
如果纯代码创建uiview,调用方式为yfview *yfview = [[yfview alloc]initwithframe:[uiscreen mainscreen].bounds];
那么它的生命周期为:
-[yfview initwithframe:] -[yfview layoutsubviews]
如果通过xib创建uiview,调用方式为nsarray *array = [[nsbundle mainbundle]loadnibnamed:@"yfview" owner:nil options:nil];[array lastobject];
那么它的生命周期为:
-[yfview initwithcoder:] -[yfview awakefromnib] -[yfview layoutsubviews]
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。