2019-01-10

iOS开发之UIView与UIViewController的生命周期总结


iOS开发中,创建View常见的两种方式一个是纯代码,一个是借助于XIB;创建ViewController常见的也有两种方式一个是纯代码,一个是借助于StoryBoard。

通过交流我发现很多童鞋对这些概念都很模糊,于是通过实验写一篇博客供参考。

重写View的如下方法

@implementationYFView

-(instancetype)init{

self= [superinit];

NSLog(@"%s", __func__);

returnself;

}

-(instancetype)initWithFrame:(CGRect)frame{

self= [superinitWithFrame:(CGRect)frame];

NSLog(@"%s", __func__);

returnself;

}

-(instancetype)initWithCoder:(NSCoder*)aDecoder{

self= [superinitWithCoder:aDecoder];

NSLog(@"%s", __func__);

returnself;

}

-(void)awakeFromNib{

[superawakeFromNib];

NSLog(@"%s", __func__);

}

-(void)layoutSubviews{

NSLog(@"%s", __func__);

}

@end

重写ViewController的如下方法

@implementationYFViewController

-(void)loadView{

NSLog(@"%s", __func__);

[superloadView];

}

- (void)viewDidLoad {

[superviewDidLoad];

// Do any additional setup after loading the view.

NSLog(@"%s", __func__);

self.view.backgroundColor = [UIColorredColor];

}

-(void)viewDidAppear:(BOOL)animated{

NSLog(@"%s", __func__);

[superviewDidAppear:animated];

}

-(instancetype)init{

self= [superinit];

NSLog(@"%s", __func__);

returnself;

}

-(instancetype)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil{

self= [superinitWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil];

NSLog(@"%s", __func__);

returnself;

}

-(instancetype)initWithCoder:(NSCoder*)aDecoder{

self= [superinitWithCoder:aDecoder];

NSLog(@"%s", __func__);

returnself;

}

-(void)awakeFromNib{

NSLog(@"%s", __func__);

[superawakeFromNib];

}

@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]

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.自定义控件 a.继承某个控件 b.重写initWithFrame方法可以设置一些它的属性 c.在layouts...
    圍繞的城阅读 8,837评论 2 4
  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 7,311评论 1 14
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 10,521评论 5 13
  • 今天是2017年4月28日,明天放假,还没想好去哪里。毕竟放假需要去走一走,过后再来记录。
    米班阅读 1,144评论 1 2
  • 每一门技术的出现都是为了解决现存的问题,同样的,Less 的出现是为了解决 CSS 中过于呆板的写法。Less 官...
    dkvirus阅读 43,071评论 24 83