OC中的初始化方法
要讲初始化方法,先来一点面向对象语言中继承的概念:
继承的概念 :继承父类的所有的实例变量和方法,比如:小学生类 -> 学生类->人类
所以当我们新写的一个类继承自一个原有的类的时候,我们也就继承了原有类的实例变量,所以 只写新类特有的实例变量。例如:人类中有一个『姓名』的实例变量,所以学生类中就可以不用写『姓名』这个实例变量,直接写特有的 例如『语文成绩』等。
继承具有传递性 小学生类 -> 学生类->人类,obviously
在子类中,进行父类方法的重载, 声明可以不用写,直接在.m文件中修改
一个类中普通方法的执行顺序:
先从本类查找对应方法,如果本类有,则执行本类方法,不再继续查找,如果本类没有,则往父类查找,直到找到,不再继续查找,执行对应方法。
初始化方法:特有的关键字init
所谓初始化方法,就是我们要新得到一个类的一个对象,在OC中使用会有这样的形式
[Person alloc] init] , alloc 在内存中开辟一块空间,init初始化 .即就是alloc相当于买地皮,init相当于盖房子
初始化方法从上往下(从父类开始)
使用super关键字 super代表一个本类对象调用父类方法
[super method]; 调用父类方法
self关键字在减号(实例)方法代表本类的一个对象
-(instancetype)init{
//初始化父类
self = [super init];
//对父类结果进行判断,如果初始化成功,则继续初始化本类特有实例
if (self) {
//初始化本类实例变量
_grade = @"";
}
return self;
}
指定初始化方法
初始化所有的实例变量,即就是让你的对象创建好的时候就具有一些基本的属性
-(instancetype)initWithName:(NSString *)name age:(NSInteger)age height:(CGFloat)height sex:(NSString *)sex;
便利构造器 alloc init步骤的一步到位
返回值最好采用instancetype ,返回你对应类型的对象
+(instancetype)personWithName:(NSString *)name age:(NSInteger)age height:(CGFloat)height sex:(NSString *)sex{
Person *person = [[Person alloc]initWithName:name age:age height:height sex:sex];
return person;
}
打印对象的所有实例变量 重写description 方法()
有时候我们需要打印特定的格式信息出来,例如 姓名= "小明",年龄= 23,电话 = 10086 ,要打印出这样的格式,我们就得重写这个方法。此方法是从所有类的父类NSObject 类中继承而来的
一次性的打印该对象的所有实例变量
-(NSString *)description{
NSString *str = [NSString stringWithFormat:@"name = %@,age = %ld,height = %.2f,sex = %@,school = %@,score = %.2f",_name,_age,_height,_sex,_school,_score];
return str;
}