博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS开发之UIView与UIViewController的生命周期总结
阅读量:6579 次
发布时间:2019-06-24

本文共 2923 字,大约阅读时间需要 9 分钟。

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复制代码

结论总结

  1. 如果控制器是直接通过代码创建出来的,并且调用方法为[[YFViewController alloc]init]创建VC的生命周期为:
-[YFViewController initWithNibName:bundle:]-[YFViewController init]-[YFViewController loadView]-[YFViewController viewDidLoad]-[YFViewController viewDidAppear:]复制代码
  1. 如果创建控制器时勾选了XIB,那么调用方法为[[YFViewController alloc]init]创建VC时的生命周期为:
-[YFViewController initWithNibName:bundle:] -[YFViewController init]-[YFViewController loadView]-[YFViewController viewDidLoad]-[YFViewController viewDidAppear:]复制代码
  1. 如果是通过SB创建控制器,那么VC的生命周期为:
-[ViewController initWithCoder:]-[ViewController awakeFromNib]-[ViewController loadView]-[ViewController viewDidLoad]-[ViewController viewDidAppear:]复制代码
  1. 如果纯代码创建UIView,调用方式为YFView *yfView = [[YFView alloc]init];那么它的生命周期为:
-[YFView initWithFrame:]-[YFView init]-[YFView layoutSubviews]复制代码
  1. 如果纯代码创建UIView,调用方式为YFView *yfView = [[YFView alloc]initWithFrame:[UIScreen mainScreen].bounds];那么它的生命周期为:
-[YFView initWithFrame:]-[YFView layoutSubviews]复制代码
  1. 如果通过XIB创建UIView,调用方式为NSArray *array = [[NSBundle mainBundle]loadNibNamed:@"YFView" owner:nil options:nil];[array lastObject];那么它的生命周期为:
-[YFView initWithCoder:]-[YFView awakeFromNib]-[YFView layoutSubviews]复制代码

转载于:https://juejin.im/post/5ab35770f265da23a0497795

你可能感兴趣的文章
提高编程技能最有效的方法(转载)
查看>>
leetcode -- Combination Sum II
查看>>
mina高并发短连接导致java.io.IOException: Too many open files解决方案
查看>>
mount nfs 经常出错信息总结(转)
查看>>
[ubuntu] ubuntu13.04安装rabbitcvs管理svn
查看>>
【驱动笔记10】再谈IRP
查看>>
HDUOJ----(1031)Design T-Shirt
查看>>
vector中的find
查看>>
〖Windows〗zigbee实验之cygwin编译tinyos.jar编译出错的解决方法
查看>>
1z0-052 q209_7
查看>>
PIN码计算锦集
查看>>
SharePoint 2013 自定义扩展菜单(二)
查看>>
[Unity3D]再次点击以退出程序
查看>>
架构师的97种习惯
查看>>
PHP 开发 APP 接口 学习笔记与总结 - XML 方式封装通信接口
查看>>
《区域经理》笔记
查看>>
前端神器之Sublime Text2/3简单明了使用总结
查看>>
**PHP删除数组中特定元素的两种方法array_splice()和unset()
查看>>
linux和windows文件名称长度限制
查看>>
对一道编程题的后续思考
查看>>