对象的初始化
-
对象刚生成的初始值的多少?
People *p = [ [People alloc] init ];
-
init
方法的实现- (id) init { self = [super init]; if (self) { weight = 70.0; height = 1.8; } return self; } 「id」是可以指向任何类型的指针类型。 后续会用「instancetype」代替「id」 「self」是每个对象预先内置在里面的变量。它表示的是对这个对象自身的引用。 「super」引用的是这个对象的父类对象。 先调用「super」对象的「init」方法,会完成一些必须的系统方面的初始化工作, 并返回初始化后的对象引用。 然后把初步初始化的对象返回给变量「self」 self = [super init];是一个习惯写法,不必纠结细节。 如果初始化失败,「super」的「init」方法会返回一个空指针(nill)。 我们要在if条件里判断初步初始化的返回值是不是空「if(self)」, 如果是空就不要继续进行自己的初始化工作。 直接把空指针返回去就好了。 如果成功了,就进入if语句块进行初始化,把体重初始化为70.0 身高初始化为1.8 但是有个问题,不可能每个人都是这种身高体重,所以我们希望每次创建people对象时, 能根据具体情况给初值,这样才合理。
-
增加一个带参数的初始化方法
People *p = [ [People alloc] init ];是不带参数的初始化。 init方法是继承来的,基本每个对象都有。 但是,看了init方法的实现,发现有个问题,不带参数,固定了初始化值, 这是不合理的,因为不可能每个对象的初始值都一样呀。
解决方案
@interface People : NSObject
{
double height;
double weight;
}
- (void) initWithHeight : (double)h andWeight : (double)w;//新加的初始化方法
- (void) growUpByHeight : (double)h andWeight : (double)w;
@end
初始化方法的实现
- (id) initWithHeight : (double)h andWeight : (double)w {
self = [super init];
if (self) {
weight = w;
height = h;
}
return self;
}
所有类的初始化方法的实现在ObjC里框架基本一致。
小结
自己在类里写带参数的初始化方法
网友评论