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

本文详细介绍了Objective-C中初始化方法的四个版本及其优化,包括版本2到版本5的实现方式,以及如何确保父类初始化成功后再进行子类实例变量的初始化。同时,文章还展示了如何在自定义类中实现自定义初始化方法和便利构造器,以简化对象创建过程。

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

 

 

 

 

 

 

转载于:https://www.cnblogs.com/tian-sun/p/4309360.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值