本文为大地瓜原创,欢迎知识共享,转载请注明出处。
虽然你不注明出处我也没什么精力和你计较。
作者微信号:christgreenlaw
OC中的构造方法,要以init
开头。构造方法中会初始化成员变量,进行一定程度的初始化配置。必须先初始化父类,再初始化子类。必须判断父类是否初始化成功,只有父类初始化成功了,才可以继续初始化子类,最后返回对象的地址。
- (instancetype)init {
self = [super init];
if(self) {
//initialization...
}
return self;
}
instancetype 和 id
id在编译时不能确定真实类型,而instancetype可以。
id可以用来定义变量,当做返回值类型,当做参数类型;
instancetype只能用作返回值类型。
自定义构造方法,请使用instancetype。
自定义构造方法一定以init开头,后面的With一定开头大写。
自定义类工厂方法是苹果的一个规范,一般情况下都是以类名小写开头,With在其后。
Person *p = [Person personWithAge:30];
自定义构造方法、类工厂方法,都要用self来指代本类创建,而不要用类名。(若用类名,则继承的子类还会使用父类来创建,因为你写死了类名)
比如Person类下继承了Student类。
Person
+ (instancetype) person {
//return [[Person alloc]init];
return [[self alloc]init];
}
+ (instancetype) personWithAge: (int)age {
//Person *p = [[Person alloc]init];
Person *p = [[self alloc]init];
p.age = age;
return p;
}
Student *s = [Student personWithAge:10];//看出来问题了吗?