zoukankan      html  css  js  c++  java
  • Objective

    在我们之前的学习里, 我们创建对象的时候都是用new方法, 其实在实际开发中,new是不太正规的写法, 写的太死了, 很有局限性, 所以我们得另寻方法解决, 让我们一起来看看吧~~~


    例子:

    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject
    @end
    
    @implementation Person
    @end
    
    int main()
    {
        Person *p1 = [Person new];
    
        Person *p2 = [[Person alloc]init];
    	
        return 0;
    }

    其实我们把new方法拆分之后, 就等于下面那一句, " alloc init ", 这么写相对于new方法来说会更加的灵活,alloc我们就不用看了, 是分配空间, 重点在init, 初始化的时候, 聪明的朋友应该想到了, 这么写, 那么在init的时候就可以初始化数值了.


    但是在重写init的时候需要注意一件事情:

    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject
    @property int age;
    @end
    
    @implementation Person
    - (id)init
    {
        self = [super init];
    
        if (self != nil)
        {
    	_age = 10;
        }
        return self;
    }
    @end
    
    int main()
    {
        Person *p1 = [Person new];
    
        Person *p2 = [[Person alloc]init];
    	
        return 0;
    }


    必须得写上self = [super init]这句, 关于深层的原理我们暂时不要去问为什么, 以后我们写重构方法, 就只有按照上面例子的几个写法, 等熟练了之后, 我们再详细说更深层次的原理.

    PS: self = [super init]; 是初始化父类中声明的成员变量, 并且赋给self, 只有self != nil的时候, 那么就代表初始化成功, 再进行下一步的初始化, 最后在返回.



    但是在C语言中, 我们知道在判断语句了不写判断条件, 默认就是 "不等于", 那么我们可以改改:

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

    更加简单的就可以完成重构方法了~~



    构造方法:用来初始化对象的方法,是个对象方法,-开头

    重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值


    重写构造方法的注意点

    1.先调用父类的构造方法[super init]

    2.再进行子类内部成员变量的初始化




    好了, 这次我们就讲到这里, 下次我们继续~~~

  • 相关阅读:
    技术博客之Saju M
    Dajax 的安装以及详细使用
    当我感觉厌倦的时候
    2014年3月22日 星期日
    windows 7远程桌面访问 ubuntu12.04
    promise的用法
    for循环中匿名同步
    开启Group Work Site功能
    Jquery根据属性模糊查询节点
    设置用户字段
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4282839.html
Copyright © 2011-2022 走看看