zoukankan      html  css  js  c++  java
  • [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.纯代码创建
    //1.UIView通用初始化方法: 创建继承自UIView的类init时会调用该方法
    - (instancetype)initWithFrame:(CGRect)frame{ }
    //2.UIView通用初始化方法: 显性调用[[Class alloc]init];会来到此方法
    - (instancetype)init{ }
    
    
    2.代码(继承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初始化方法调用顺序
    
    1.纯代码创建VC
    //1.VC通用的初始化方法: 纯代码创建或者从Xib加载VC时调用该方法
    - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{}
    //2.VC通用初始化方法: 显性调用[[Class alloc]init];会来到此方法
    - (instancetype)init{}
    
    
    2.代码(继承UIViewController的自定义类)+Xib创建VC
    //1.VC通用的初始化方法: 纯代码创建或者从Xib加载VC时调用该方法
    - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{}
    //2.VC通用初始化方法: 显性调用[[Class alloc]init];会来到此方法
    - (instancetype)init{}
    
    
    3.代码(继承UIViewController的自定义类)+Storyboard加载VC
    //VC特殊初始化方法: 仅当VC从Storyboard加载时调用该方法(不调用init)
    - (instancetype)initWithCoder:(NSCoder *)aDecoder{}

     

    iOS开发者交流群:180080550
  • 相关阅读:
    权重
    盒模型
    认识html标签
    CSS盒子模型
    行内元素和块级元素的区别
    搭建线路mvc实现接口获取数据库数据
    实现车辆信息编辑功能
    最近系统更新进度截图
    最近没写什么---更新下,在家没键盘就偷懒了
    基于web公交查询系统----管理员公交站点管理页面实现
  • 原文地址:https://www.cnblogs.com/stevenwuzheng/p/5419094.html
Copyright © 2011-2022 走看看