Objective-C中 构造函数的声明以及id 和 instancetype 的区别

OC中,如何声明一个构造函数呢?以及在声明构造函数时,构造函数的返回类型可以写instancetype和id,那么这两个关键字到底有什么区别呢?声明构造函数时,用哪种方法更好呢??我们就来探讨一下。

声明构造函数

OC中,声明构造函数的语法,和Java,C++,C#等语言是有一些不一样的。首先,构造函数有返回类型,而且,并不是通过参数列表的不同,来重载构造函数。比如我们在很多面向对象语言里,都会看到类似如下的构造函数:

class Student
{
    Student()
    {
    }
    Student(int name, int age)
    {
        this.name = name;
        this.age = age;
    }

}

但是在OC中,构造函数,或者叫构造方法,不但有返回值,而且不靠参数重载进行区分,是这样的:

-(instancetype) init
{
   self = [super init];
   if(self){
       self.name = @"xiaoming";
       self.age = @18; 
   }
   return self;
}

而如果想要进行不同参数的构造方法重载,是这样写的

-(Student *) initWithAge (int) age : AndName (NSString *) name
{
    self = [super init];
    if(self)
    {
       self.age = age;
       self.name = name;
    }
    return self;
}

感觉就完全是另一个普通的方法了,和构造函数没什么关系。

两个关键字的区别

特殊类型instancetype表明,从init方法返回的类型与它初始化类相同,也就是说,如果你发送初始化消息给Student对象,则编译器会推断出init方法的返回值就是Student类。而id类型需要在运行时才能确定init方法的返回类型。
id变量也可以用来声明变量,但是instancetype却不能用来声明变量。

哪个关键字更好

推荐使用instancetype关键字,因为被继承的初始化方法不能明确定义她们需要返回的对象类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值