[BS-05] init、initWithFrame和initWithCoder的区别
init、initWithFrame和initWithCoder的区别
1.Xib方式自定义UIView(指任意的UI控件)
使用Xib文件,就是我们所常用的“拖控件”的方式。如果我们使用了该方法创建了UIView(所有控件),那么initWithFrame方法是不会被调用的,因为nib文件已经定义好了view的长、宽、背景以及其他的一些属性。
那么我们要想重写nib中的各项属性,就要在initWithCoder这个方法里面进行了。
2.纯代码的方式自定义UIView(指任意的UI控件)
用纯代码的方式去自定义一个view,就是我们新建一个继承自UIView(包含UIView/UIButton/UILabel等)的类,当我们加在该view控件的时候就会调用initWithFrame来初始化该view控件。尤其需要注意的是,如果是在子类中重写initWithFrame方法,必须先调用父类的initWithFrame方法,再对自定义的UIView的子类进行初始化操作。
纯代码创建自定义继承UIView的控件类,在使用[[Class alloc]init];方法创建对象时,会先调用的是initWithFrame方法,然后再调用init方法。但在以上方法中设置的frame不一定是最后显示的值,在视图显示之前,均会根据设定的约束(AutoLayout)调用layoutSubviews对子视图进行重新布局。
3.UIView和UIViewController初始化方法顺序
UIView和UIViewController初始化方法调用顺序 一、UIView初始化方法调用顺序 .纯代码创建
//1.UIView通用初始化方法: 创建继承自UIView的类init时会调用该方法
- (instancetype)initWithFrame:(CGRect)frame{ }
//2.UIView通用初始化方法: 显性调用[[Class alloc]init];会来到此方法
- (instancetype)init{ } .代码(继承UIView类)+Xib创建
//1.UIView通用初始化方法: 创建继承自UIView的类init时会调用该方法
- (instancetype)initWithFrame:(CGRect)frame{}
//2.UIView通用初始化方法: 显性调用[[Class alloc]init];会来到此方法
- (instancetype)init{}
//3.UIView特殊初始化方法: 仅用作从Xib加载UIView视图时调用该方法
- (instancetype)initWithCoder:(NSCoder *)aDecoder{} 二、UIViewController初始化方法调用顺序 .纯代码创建VC
//1.VC通用的初始化方法: 纯代码创建或者从Xib加载VC时调用该方法
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{}
//2.VC通用初始化方法: 显性调用[[Class alloc]init];会来到此方法
- (instancetype)init{} .代码(继承UIViewController的自定义类)+Xib创建VC
//1.VC通用的初始化方法: 纯代码创建或者从Xib加载VC时调用该方法
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{}
//2.VC通用初始化方法: 显性调用[[Class alloc]init];会来到此方法
- (instancetype)init{} .代码(继承UIViewController的自定义类)+Storyboard加载VC
//VC特殊初始化方法: 仅当VC从Storyboard加载时调用该方法(不调用init)
- (instancetype)initWithCoder:(NSCoder *)aDecoder{}
[BS-05] init、initWithFrame和initWithCoder的区别的更多相关文章
- initWithFrame和initWithCoder的区别
如果使用了Interface Builder 方式或nib,就不会调用initWithFrame方法,因为nib文件知道怎么初始化了, 但可以使用initWithCoder这一个更深层的init方法来 ...
- iOS initWithFrame、initWithCoder、awakeFromNib的区别解析
当我们需要自定义一个View控件时,会有 initWithFrame.initWithCoder.awakeFromNib 这三个系统方法,关于这三个方法何时调用,如何调用,有时候可能很多人会弄混淆. ...
- 什么是CS和BS结构,两种结构的区别
什么是CS和BS结构,两种结构的区别 什么是C/S和B/S结构? C/S又称Client/Server或客户/服务器模式.服务器通常采用高性能的PC.工作站或小型机,并采用大型数据库系 ...
- initWithFrame、initWithCoder、awakeFromNib的区别和调用次序 & UIViewController生命周期 查缺补漏
当我们创建或者自定义一个UI控件时,就很可能会调用awakeFromNib.initWithCoder .initWithFrame这些方法.三者的具体区别如下: initWithFrame: 通过代 ...
- OC--init,initialize,initWithCoder:,initWithFrame:各方法的区别和加载顺序
1.先把OC的类分清楚各有什么方法 普通类的方法 init initialize: 控制器类的方法 init initialize: initWithCoder: UI控件类的方法 init init ...
- 【学习总结】 init & initWithFrame & initWithCoder
//当我们所写的程序里没用用Nib文件(XIB)时,用代码控制视图内容,需要调用initWithFrame去初始化 - (id)initWithFrame:(CGRect)frame { if (se ...
- init&initWithFrame&initWithCoder
//当我们所写的程序里没用用Nib文件(XIB)时,用代码控制视图内容,需要调用initWithFrame去初始化 - (id)initWithFrame:(CGRect)frame { if (se ...
- initWithFrame和initWithCoder区别
当我们所写的程序里没用用Nib文件(XIB)时,用代码控制视图内容,需要调用initWithFrame去初始化 - (id)initWithFrame:(CGRect)frame{ if (self ...
- initWithFrame 和 initWithCoder 区别?
当我们所写的程序里用代码创建控制视图内容,需要调用initWithFrame去初始化 - (id)initWithFrame:(CGRect)frame { if (self =[superinitW ...
随机推荐
- Hadoop工程包架构解析
Hadoop源码解析 1 --- Hadoop工程包架构解析 1 Hadoop中各工程包依赖简述 Google的核心竞争技术是它的计算平台.Google的大牛们用了下面5篇文章,介绍了它们的计算 ...
- POJ 1088 滑雪(记忆化搜索)
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 92384 Accepted: 34948 Description ...
- OC中的属性、方法及内存管理
普通方法:关注(代表)对象可以”干什么”,过程中需要实例变量.-(void)show;输出 … 访问属性 属性:属性专门处理实例变量.(程序执行过程当中) 初始化方法:一创建对象(第一时间 ...
- ibatis动态sql配置启动时提示:The content of elements must consist of well-formed character data...
ibatis动态sql配置启动时提示:The content of elements must consist of well-formed character data... 2012-07-18 ...
- PHP 错误与异常 笔记与总结(5)配置文件中与错误日志相关的选项 && 将错误记录到指定的文件中
[记录错误(生产环境)] php.ini: ① 开启 / 关闭 错误日志功能 log_errors = On ② 设置 log_errors 的最大字节数 log_errors_max_len = 其 ...
- 免费手机号码归属地API查询接口和PHP使用实例分享
免费手机号码归属地API查询接口和PHP使用实例分享 最近在做全国性的行业分类信息网站,需要用到手机号归属地显示功能,于是就穿梭于各大权威站点之间偷来了API的接口地址. 分享出来,大家可以用到就拿去 ...
- ecshop中$user对象
ecshop中$user对象 2011-10-01 18:41:23| 分类: ECSHOP | 标签:ecshop $user 对象 |举报|字号 订阅 http://blog.163.c ...
- PHP基本使用
本篇说的基本使用包括: php常规的语法 date,number,array等对象的处理方式 程序语言的常规的语法都比较好理解,大致相同.假如你是精于其它解释型语言的程序员,迁移到php几乎不费力气. ...
- Python之if语句
计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,可以用if语句实现: age = 20 if age >= 18: ...
- android source compiler