//版本1//- (id)init//{ // work = @"工作";// return self;//}//// //版本2:调用父类的init方法,为父类的实例变量赋初值//- (id)init//{ // [super init];// work = @"工作";// return self;//}//// //版本3:出于安全考虑,判断父类是否初始化成功,如果父类初始化成功,,在初始子类//- (id)init//{ // self = [super init];// if (self != nil) { // work = @"工作";// }// return self;//} //版本4 代码优化//- (id)init//{ // self = [super init];// if (self) { // work = @"工作";// }// return self;//} //版本5:优化代码//- (id)init//{ // if (self = [super init]) { // work = @"工作";// }// return self;//} //初始化方法 //1.返回值类型为id //2.方法名一般以init开头 //3. //重写系统方法 - (id)init { self = [super init];//调用父类初始化 if (self) { //判断父类是否初始化成功 work = @"工作";//给实例变量赋初值 } return self;//最终返回self}
@interface Student : NSObject{ NSString *name; NSInteger number; CGFloat score;} //自定义初始化方法 //解决的问题:把初始化和实例变量的赋值,结合在一起 //1.实例方法(-) //2.返回值类型为id //3.方法以init开头- (id)initWithName:(NSString *)aName number:(NSInteger)aNumber score:(CGFloat)aScore;- (id)initWithName:(NSString *)aName; //便利构造器 //解决问题:把对象的创建和实例变量的赋值,结合在一起 //1.类方法(+) //2.返回值类型为当前类(Student *) //3.方法以当前类名开头(student)+ (Student *)studentWithName:(NSString *)aName number:(NSInteger)aNumber score:(CGFloat)aScore;
+ (Student *)studentWithName:(NSString *)aName number:(NSInteger)aNumber score:(CGFloat)aScore{ //1// Student *student = [[Student alloc] init];// [student setName:aName];// [student setNumber:aNumber];// [student setScore:aScore];// return student; //2// Student *student = [[Student alloc] initWithName:aName number:aNumber score:aScore];// return student; //3 return [[Student alloc] initWithName:aName number:aNumber score:aScore];}