美文网首页
iOS中init构造方法

iOS中init构造方法

作者: 张开V | 来源:发表于2017-10-27 08:54 被阅读70次

1.重写init方法

想在对象创建完毕后,成员变量马上就有一些默认的值就可以重写init方法

重写init方法格式:

  • (id)init {
    self = [super init];
    if (self) {
    // Initialize self.
    }
    return self;
    }
  • [super init]的作用:
    面向对象的体现,先利用父类的init方法为子类实例的父类部分属性初始化。

  • self 为什么要赋值为[super init]:
    简单来说是为了防止父类的初始化方法release掉了self指向的空间并重新alloc了一块空间。还有[super init]可能alloc失败,这时就不再执行if中的语句。

重写init方法其它格式

  • (id)init {
    if (self = [super init]) {
    // Initialize self.
    }
    return self;
    }

⭐️构造方法使用注意

●子类拥有的成员变量包括自己的成员变量以及从父类继承而来的成员变量,在重写构造方法的时候应该首先对从父类继承而来的成员变量先进行初始化。
◆原则:先初始化父类的,再初始化子类的。
◇先调用父类的构造方法[super init];
◇再进行子类内部成员变量的初始化。
●千万不要把self = [super init]写成self == [super init]
●重写构造方法的目的:为了让对象方法一创建出来,成员变量就会有一些固定的值。

●instancetype的作用

instancetype与id相似,不过instancetype只能作为方法返回值,它会进行类型检查,如果创建出来的对象,赋值了不相干的对象就会有一个警告信息,防止出错。
// init此时返回值是id
NSString *str = [[Person alloc] init];
// Person并没有length方法, 但是id是动态类型, 所以编译时不会报错
NSLog(@"length = %i", str.length);
// init此时返回值是instancetype
// 由于instancetype它会进行类型检查, 所以会报警告
NSString *str = [[Person alloc] init];
NSLog(@"length = %i", str.length);
instancetype *p = [[person alloc] init];
// 错误写法instancetype只能作为返回值

相关文章

  • iOS中init构造方法

    1.重写init方法 想在对象创建完毕后,成员变量马上就有一些默认的值就可以重写init方法 重写init方法格式...

  • ios init方法的写法

    ios的init方法,只能在init方法中给self复值,Xcode判断是否为init方法规则:方法返回id,并且...

  • python-迭代器

    迭代器 1、构造方法 init() 无参构造和有参构造 class Foo(): def __init__(s...

  • Thread

    构造函数 创建 Thread 对象的时间都会调用 init() 方法,取一个最常用的构造方法 init() 方法的...

  • init和clinit区别

    init:是对象构造器方法,也就是new一个对象才会执行init方法clinit:是类构造器方法,jvm进行类加载...

  • 魔法方法

    __new__ + __init__ 等于构造方法

  • swift3语法(十一)

    构造过程 构造器init(){} 结构体的构造方法struct publicStruct { var num...

  • 构造函数返回一个指定的对象,实例是这个对象的实例

    jQuery 中,jQuery的构造方法是jQuery.fn.init(selector,context),是作为...

  • Swift 的构造器(一)

    前言 本文主要是Swift的构造器相关知识,另加少部分的OC中的init方法(还有少许Java相关的构造方法...

  • 子类继承父类函数

    如果在子类中需要父类的构造方法就需要显式地调用父类的构造方法,或者不重写父类的构造方法。子类不重写 init,实例...

网友评论

      本文标题:iOS中init构造方法

      本文链接:https://www.haomeiwen.com/subject/upmkpxtx.html