• 构造方法 init 初始化 对象 oc


    为什么要重写init方法,重写有什么好处和作用:一般用来什么事情:

    1.可以用来创建对象,这个是最基本的;配合alloc使用;

    2.init什么时候会被执行,当对象被创建的时候;

    3.好处和作用:

    网友解答:可以在你实例化的时候提供更多参数以便实现对对象的快速赋值。重写init可以让你创建的对象出来就是成品。而不重写的话,还需要你对该对象的属性进行赋值。

    4.解析一下self = [super init];为什么每次重写init方法都要写上这一句:

    网友解答:self 为时候,系统已经生成了对象并分配了存储空间,在调用[super init]是为了初始化父类对象,在父类对象初始化过程序中有可能失败(如网络资源调用失败)或者返回其它对象(这个取决于你的父类了),这个时候的self其实也可以继续执行子类对象的初始化工作,因为都是同一个对象,只不过在你调用父类的某一些功能可能不起作用或者报错。

    1. 完整的创建一个可用的对象:要以下几个步骤;
      1. 分配存储空间 +alloc
      2. 初始化;-init
    2. 构造方法是用来初始化对象的方法,如init,
    3. 构造方法一定是对象方法,以-号开头;
    4. //实现对每个Person对象创建出来,它的_age都是10;
    5. 重写init方法是在implementation里面;
    6. 重写-init方法
    @implementation Person
    - (id)init
    {
    self = [super init ];当前对象self
    if (self !=nil)//如果对象初始化成功,才有必要进行接下来的初始化
    {
    _age = 10;
    }
    return self;//返回一个已经初始化完毕的对象;
    }
    @end
    

     上面的代码可以写成:

    - (id)init
    {
    if (self = [super init])
    {
    _age = 10;
    }
    return self;
    }
    

     xcode自动帮我们生成的,都是private

    1. 重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值;
    2. 重写构造方法的注意点;
      1. 先调用父类的构造方法[super init]
      2. 在进行子类内部成员变量的初始化;
    3. 任何对象在初始化自己之前,会调用父类的初始化方法;
    4. 因为父类里面的属性也需要初始化;所以用[super init]来初始化父类的属性,如isa指针;初始化isa指针后,isa指针就会指向当前的对象;
    5. if (self != nil)因为这里的self在前面已经初始化了,self是指针,self如果初始化了之后,会指向内存地址;不会是0,如果是0,则初始化失败;如果初始化成功,就对它进行赋值;
    - (id) init
    {
    if(self = [super init])
    {
    _age = 100;
    }
    return self;
    }
    
    1. 重写init方法,需要调用父类的init方法;
    2. NSObject是最基本的类,没有父类;
  • 相关阅读:
    跟我学Windows Azure 一 创建Windows Azure试用账号
    Dynamic编程
    多线程下的资源同步访问
    避免在同一机器上同时运行同一应用程序的多个实例
    依赖注入与Service Locator
    MVP演化论
    应用MVP模式对遗留代码进行重构
    对遗留代码的解依赖技术
    单元测试之测试方法
    单元测试之Mock
  • 原文地址:https://www.cnblogs.com/williamliuwen/p/5370053.html
Copyright © 2020-2023  润新知