A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© alanwangke213 中级黑马   /  2015-8-4 21:45  /  390 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

OC中给对象进行初始化的方法是: init 该方法是一个对象方法,返回的是一个对象(调用init方法的对象)
OC的构造方法,主要学习如何重写构造方法,让对象创建后,就有初始值

说明:alloc方法:向某个类发送alloc消息的结果,为该类分配内存,以存放该类的全部实例变量,还将这块内存区域全部初始化为0
      init方法是构造方法,是用来初始化对象的方法,注意这是一个对象方法,以减号开头。默认初始化完毕后,所有成员变量的值都为0   
注意:  1.一个刚刚分配的对象并不能立即使用
        2.需要先初始化该对象,然后才能使用它
        3.但由于未进行初始化,随后可能出现一些不可预测的行为。

重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值
把new方法拆开如下:
        1.调用类方法+alloc分配存储空间,返回未经初始化的对象     Person *s1 = [Person alloc];
        2.调用对象方法-init进行初始化,返回对象本身     Person *p2 = [p1 init];
        3.以上两个过程整合为一句:Person *p = [[Person alloc] init];

涉及的几个问题:1.[super init]的作用:面向对象的体现,先利用父类的init方法为子类实例的父类部分属性初始化。
                2.self为什么要赋值为[super init];
                简单来说就是为了防止父类的初始化方法release掉了self指向的空间并重新alloc了一块空间。
                这时,[super init]可能alloc失败,这时就不再执行if中的语句。
                3.super作为消息接受者的实质
                super并不是真正的指针,[super message]的实质是有self来接受父类的message。需要注意的是,[super message]中,
                message方法出现的self为[self message]语境中的self,即子类实例。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马