OC中init方法的重写和自定义

一、init方法介绍

OC中的init方法的作用是在对象实例化后对其初始化,在其它编程语言中(如Java、C++)都有构造方法,OC中init方法和构造方法是一个概念的。

假设有如下的类声明和实现:

#import <Foundation/Foundation.h>
@interface Student : NSObject
@property NSString *name;
@property int age;
@property float score;
-(void)show;
@end

@implementation Student
-(void)show
{
    NSLog(@"I am a Student,My name is %@ ,%d years old",_name,_age);
}
@end

调用Student类的类方法new

Student *s1=[Student new];

其等价于

Student *s2=[[Student alloc] init];

其中alloc方法用于实现化一个对象,init用来将对象初始化。

默认的初始化规则是:

基本数据类型初始化为0

指针数据类型初始化为空

如果我们不想使用默认的初始化规则,则可以重写init方法或自定义init方法。


二、重写init方法

    重写init方法必须符合如下规范:

- (instancetype)init
{
    self = [super init]; //用于初始化父类
    if (self) {
//        do something
    }
    return self;
}

下面我们将重写Student类的init方法

- (instancetype)init
{
    self = [super init]; //用于初始化父类
    if (self) {
        self.name=@"小明";
        self.age=18;
    }
    return self;
}

在main函数中使用使用new类方法实例化一个对象

Student *s1=[Student new];
[s1 show];


运行结果:

I am a Student,My name is 小明 ,18 years old

Program ended with exit code: 0


    三、自定义的init方法

自定义的init方法常用于在初始化对象时指定对象的值,同样的,自定义的init方法也需要遵守一定的语法规范:


- (instancetype)initWithName:(NSString *)name andAge:(int)age
{
    self = [super init];
    if (self) {
//        statements
    }
    return self;
}

自定义的init方法需要在@inferface中声明而且其中方法名必需符合initWithXXX: … andXXX:…

否则编译编译器不会把它当做init方法,导致错误。


main函数中使用使用自定义init方法实例化一个对象


Student *s2=[[Student alloc ]initWithName:@"小华" andAge:21];
[s2 show];

运行结果:

I am a Student,My name is 小华 ,21 years old

Program ended with exit code: 0


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值