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

来源:互联网 发布:第六届社交网络 编辑:程序博客网 时间:2024/05/16 11:20

一、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


原创粉丝点击