Object_C初始化方法, 遍历构造器

时间:2021-03-17 05:56:24

//版本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];
}