欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS开发教程之UIView和UIViewController的生命周期详解

程序员文章站 2023-12-15 15:30:16
前言 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]

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。

上一篇:

下一篇: