首页 > 代码库 > 【OC学习-7】2种常用的对象初始化方法以及方法的具体写法

【OC学习-7】2种常用的对象初始化方法以及方法的具体写法

我们在创建一个新的对象时,用到初始化,但由于这个初始化函数没有特别编写,所以没什么效果,现在我们就来看看这个初始化函数怎么书写。

如果没有经过我们自己的初始化函数赋值的话,那么一般在创建一个对象后,会一个个赋值,如下:

#import <Foundation/Foundation.h>
#import "ASStudent.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        ASStudent * zhang=[[ASStudent alloc]init];
        [zhang setName:@"tom"]; //通过setName函数赋值
        [zhang setAge:18];  //通过setAge函数赋值
        NSLog(@"%@,%d",[zhang name],[zhang age]);
    }
    return 0;
}

有了初始化之后,有些变量的值在创建时就可以指定。

(1)用init函数初始化——因为是直接从父类继承过来的,所以不需要在.h文件声明,可直接在.m里面写内容

//上面alloc给对象分配空间后,就开始初始化,发现有如下的初始化函数,则调用如下函数
-(id)init{
    if (self=[super init]) {    //用父类初始化函数初始化继承父类的变量,并把这个地址赋值给self
        name=@"tom";
        age=18;
    }
    return self;   //最终还是返回一个地址
}

(2-1)还有一种常用的方法,是先定义一个初始化变量最多的指定初始化函数,不指定变量值,在创建对象时再指定具体值——需要先在.h里声明,然后在.m中写内容,和写普通函数(方法)类似

//在ASStudent.h里先声明
-(id)initWithName:(NSString *)aName Sid:(NSString *)aSid Age:(int)aAge;

//然后在ASStudent.m里写具体内容
//格式和init一致,只不过多了几个形参
-(id)initWithName:(NSString *)aName Sid:(NSString *)aSid Age:(int)aAge{
        if (self=[super init]) {
            name=aName;
            sid=aSid;
            age=aAge;
        }
        return self;
    }

//最后在main.m中创建对象的时候就初始化赋值,即可
ASStudent * zhang=[[ASStudent alloc]initWithName:@"andy" Sid:@"110" Age:19];

(2-2)在上面指定初始化函数的基础上,可以衍生出拥有不同参数的初始化函数,这样以后需要用哪个初始化函数就可以随意用。——需要先在.h里声明,然后在.m中写内容,和写普通函数(方法)类似

//ASStudent.h里,只初始化一个参数的函数(方法)
-(id)initWithName:(NSString *)aName;

//ASStudent.m写具体内容
//这里面调用了上面有三个参数的指定初始化函数,只不过把里面的其中一个参数Name的赋值权利给了我们下面的这个函数
-(id)initWithName:(NSString *)aName{
    return [self initWithName:aName Sid:nil Age:25];
}

//当然,在main.m里初始化也是调用新的初始化函数(方法)
ASStudent * zhang=[[ASStudent alloc]initWithName:@"jack"];

【OC学习-7】2种常用的对象初始化方法以及方法的具体写法