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的区别的更多相关文章

  1. initWithFrame和initWithCoder的区别

    如果使用了Interface Builder 方式或nib,就不会调用initWithFrame方法,因为nib文件知道怎么初始化了, 但可以使用initWithCoder这一个更深层的init方法来 ...

  2. iOS initWithFrame、initWithCoder、awakeFromNib的区别解析

    当我们需要自定义一个View控件时,会有 initWithFrame.initWithCoder.awakeFromNib 这三个系统方法,关于这三个方法何时调用,如何调用,有时候可能很多人会弄混淆. ...

  3. 什么是CS和BS结构,两种结构的区别

    什么是CS和BS结构,两种结构的区别 什么是C/S和B/S结构?         C/S又称Client/Server或客户/服务器模式.服务器通常采用高性能的PC.工作站或小型机,并采用大型数据库系 ...

  4. initWithFrame、initWithCoder、awakeFromNib的区别和调用次序 & UIViewController生命周期 查缺补漏

    当我们创建或者自定义一个UI控件时,就很可能会调用awakeFromNib.initWithCoder .initWithFrame这些方法.三者的具体区别如下: initWithFrame: 通过代 ...

  5. OC--init,initialize,initWithCoder:,initWithFrame:各方法的区别和加载顺序

    1.先把OC的类分清楚各有什么方法 普通类的方法 init initialize: 控制器类的方法 init initialize: initWithCoder: UI控件类的方法 init init ...

  6. 【学习总结】 init & initWithFrame & initWithCoder

    //当我们所写的程序里没用用Nib文件(XIB)时,用代码控制视图内容,需要调用initWithFrame去初始化 - (id)initWithFrame:(CGRect)frame { if (se ...

  7. init&initWithFrame&initWithCoder

    //当我们所写的程序里没用用Nib文件(XIB)时,用代码控制视图内容,需要调用initWithFrame去初始化 - (id)initWithFrame:(CGRect)frame { if (se ...

  8. initWithFrame和initWithCoder区别

    当我们所写的程序里没用用Nib文件(XIB)时,用代码控制视图内容,需要调用initWithFrame去初始化 - (id)initWithFrame:(CGRect)frame{ if (self  ...

  9. initWithFrame 和 initWithCoder 区别?

    当我们所写的程序里用代码创建控制视图内容,需要调用initWithFrame去初始化 - (id)initWithFrame:(CGRect)frame { if (self =[superinitW ...

随机推荐

  1. ASP.NET开发中主要的字符验证方法-JS验证、正则表达式、验证控件、后台验证

    ASP.NET开发中主要的字符验证方法-JS验证.正则表达式.验证控件.后台验证 2012年03月19日 星期一 下午 8:53 在ASP.NET开发中主要的验证方法收藏 <1>使用JS验 ...

  2. ajax利用json进行服务器与客户端的通信

    1.JQuery中$.ajax()方法参数详解 http://blog.sina.com.cn/s/blog_4f925fc30100la36.html 2.服务器端获取String que=requ ...

  3. linux源码组织

    linux源代码在https://www.kernel.org/就可以下.现在的稳定版本是3.16.3. 因为简历上有个项目是内核有关的,为了准备一下面试,还是要重温一下内核才行.最基本的,哪些文件在 ...

  4. 小组项目alpha发布的评价

    新蜂团队一直都特别努力,这节课我也看到了他们努力的结果--项目可以顺利运行,在两个同学试玩期间没有出现BUG,不知道玩游戏的同学的心情,反正我们在台下看得很开心的. 飞天小女警组的礼物挑选系统,是一个 ...

  5. ajax的同步和异步问题 (转)

    async默认的设置值为true,这种情况为异步方式,当ajax发送请求后,在等待server端返回的数据的过程中,程序会继续执行ajax块后面的代码,直到服务器返回正确的结果才会去执行success ...

  6. Memcached 笔记与总结(4)memcache 扩展的使用

    在 wamp 环境下进行测试:WAMPSERVER 2.2(Windows 7 + Apache 2.2.21 + PHP 5.3.10 + memcache 3.0.8 + Memcached 1. ...

  7. php安装json模块

    centOS上因为看php源码中没有json模块,于是采用pecl自动编译安装:# yum install php-devel# yum install php-pear# yum install g ...

  8. Linux命令echo -e

    在Linux命令中 echo -e 这个参数e是什么意思. echo –e “I will use ‘touch’ command to create 3 files.” 这里参数e的作用是什么 ma ...

  9. 图解SQL多表关联查询

      图解SQL多表关联查询     网上看了篇文章关于多表连接的,感觉很好,记录下来,以便日后自己学习  内连接     左连接     右连接       全外连接   1. 查两表关联列相等的数据 ...

  10. go liteIDE

    go  liteIDE 1 COMM FILE package pricetable import ( "fmt" "math" "os" ...