[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 ...
随机推荐
- c#委托事件及其讲解
一定要标明出处,波哥的文章.所有文章都值得一看.这篇是摘抄的大白话之C#事件讲解.委托 http://www.cnblogs.com/wudiwushen/archive/2010/04/20/170 ...
- .net 开发的奇淫巧计
随机数 Random random = new Random(( int)DateTime .Now.Ticks & 0x0000FFFF); 如何让ASP.NET Web API显示完整的错 ...
- Yii源码阅读笔记(四)
所有控制器action的基类yii\base\Action.php namespace yii\base;//定义的命名空间 use Yii //使用的命名空间 class Action extend ...
- 原创:CentOS6.4配置solr 4.7.2+IK分词器
本文原创,转载请注明出处 相关资源下载:http://pan.baidu.com/s/1pJPpiqv 1.首先说明一下 solr是java语言开发的企业级应用服务器,所以你首先安装好jdk,配置好j ...
- 微信公众账号开发教程(一) 基本原理及微信公众账号注册 ——转自http://www.cnblogs.com/yank/p/3364827.html
微信公众账号开发教程 基本原理 在开始做之前,大家可能对这个很感兴趣,但是又比较茫然.是不是很复杂?很难学啊? 其实恰恰相反,很简单.为了打消大家的顾虑,先简单介绍了微信公众平台的基本原理. 微信服务 ...
- nginx 反向代理 取得真实IP和域名
nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递 ...
- 【转】Unity 之 移动设备的触控操作
http://blog.csdn.net/anyuanlzh/article/details/18367941 这篇博文将简单的记录,如何用unity处理在移动设备上的触控操作. iOS和And ...
- 获得sql对应的binary
Declare @max Varbinary(max) select @Max = convert(Varbinary(max) , ' Select ' ) Print ' DECLARE @sql ...
- 答CsdnBlogger问-关于安卓入行和开发问题
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 问1:请问大牛对功能和框架的认识有哪些?(提问者:执笔记忆的空白) 比如对于一个小公司来说,什么样的 ...
- 【C51】单片机芯片之——图解74HC595
第一部部分用于快速查阅使用,详细的使用见文章第二部分 引脚图