在我们OC中经常用到这样一个东西,即创建一个对象,例如,Person *p = [Person new];我们知道这是一个创建对象并且分配存储空间、初始化的过程。首先当调用new时首先可以返回一个alloc 方法,这方法就会给我们在内存分配一个存储空间来存储我们新建的对象,即Person *p= [Person alloc];然后我们的对象还有初始化,这时就要调用一个对象方法来做初始化,即Person *p = [P init ]。实质上就是这样,Person *p = [[Person alloc] init]。
这就是我们的构造方法,它就是用来初始化我们的对象的方法。
在我们编程的过程中,我们经常会遇到这种情况,比如,我们建立一个学生的分数对象,建立之后我们要求分数,即初始化后就有分数。这时就可以用到我们的构造方法来给它初始化后马上就有一个默认值(不操作,它们的默认值为0)。那么我们就需要重写init,即重写初始化值。
在init这种构造方法时,我们需要注意的是,他是先调用父类的构造方法,即[super init],再进行子类的内部成员的初始化,例如,(下面的完整程序中)
在使用上面的构造方法初始化我们的成员变量时,我们发觉它是一个需要我们在程序还没有写完就确定,也就是他不能接受外界输入的值。为了满足这个需求,自定义方法就出现了。
自定义方法需要遵循以下格式:1、对象方法必须以“_”开始 2、返回值一定是id类型 3、方法名一般以init开始 4、要接受参数,参数的类型与要初始化成员变量的类型一样 5、谁的成员变量就在谁的哪里初始化(比如下例的,学号是学生的成员变量,那么姓名、年龄都在人的这个类中初始化)。