[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 ...
随机推荐
- jQuery 事件的命名空间
在没有看到这篇 文章之前,我一直不知道原来bind也可以有命名空间.事实上,我看完这篇文章后,再去翻了一下手册,也才发现了一点点的注释.但手册也仅仅是一句话就带 过去了.没有过多的深究,或许他认为命名 ...
- shenyi 语录
[讲师]沈逸(65480539) 2016-06-08 14:58:42 会centos 转redhat是分分钟的事 [讲师]沈逸(65480539) 2016-06-08 14:58:54 查看 ...
- JavaScript - 时间函数
时间美化函数 /* 1.< 60s, 显示为“刚刚” 2.>= 1min && < 60 min, 显示与当前时间差“XX分钟前” 3.>= 60min &am ...
- java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntim [问题点数:40分,结帖人wangxiaohua_001]
14:56:10.093 WARN!! Error for /butterfly/plugins/zhonghang/UsefulData/save_usefuldata.bshjava.lang.N ...
- select * 所有字段时如何巧妙的使用覆盖索引
内容从"mysql高性能书籍" 179页摘取 当select * 时.往往使用不到索引..效率不高,因为查询从表中选择所有的列,没有任何索引能覆盖所有的列.不过还是有捷径可以利用 ...
- A20VGA和lvds显示的切换-
./fex2bin sys_config_lvds.fex /boot/script.bin sys_config_lvds.fex的作用:配置各种外设,端口,I/O针脚信息的文件 生成 script ...
- Oracle 删除重复行
DELETE FROM your_table WHERE rowid not in (SELECT MIN(rowid) FROM your_table GROUP BY column1, colum ...
- NEC学习 ---- 布局 -两列, 右侧定宽,左侧自适应
该篇必须引用初始化样式和功能性样式,样式在前篇 http://www.cnblogs.com/Zell-Dinch/p/4436054.html 中已经提及. 上篇中介绍了左侧定宽,右侧自适应的布局, ...
- backbone-todo案例分析
todo案例可以到这个地址下载 https://github.com/jashkenas/backbone 添加数据后 todo案例不涉及Router,仅有Model.Collection.View的 ...
- php读取memcahed java session
PHP 共享 JAVA 保存的session信息 情景: 1:现在有两个系统,一个是Java做的系统,一个是PHP的系统,现在要把两个系统弄成一个单点登录. 2:两个系统两个库,两个库的表结构完全不同 ...