频道栏目
首页 > 资讯 > 其他 > 正文

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

17-06-20        来源:[db:作者]  
收藏   我要投稿

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

一、init方法介绍

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

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

 

#import 
@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


相关TAG标签
上一篇:Maven(打包Scala程序打不进class文件和依赖的解决办法)
下一篇:智能手环乱象丛生,旺盛的需求或将加速行业洗牌
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站