【OC易错】类方法中的self指的是类而不是对象

1.太不认真了,没有好好分析类方法中的self

1> 以下代码出问题了:

+(void)studentWithName:(NSString *)name andAge:(int)age andScore:(int)score{

    //1.给对象开辟一块内存并初始化,并调用该对象的autorelease方法。若以上语句执行成功,就进行赋值。
    if ( self = [[[Student alloc] init] autorelease]) {

        //1.由于_name变量在赋值时需要release旧值,copy新值,因此最好调用setName方法。
        self.name = name;
        self.age = age;
        self.score = score;
    }
    //2.返回创建好的对象
    return self;
}

2> 如果这是对象方法initWithName:andAge:andScore:,self可以像上面一样调用。但这是类方法啊,返回的是对象不是void,大哥,真是眼高手低啊!

3> 正确代码如下:

+(id)studentWithName:(NSString *)name andAge:(int)age andScore:(int)score{

    //1.给对象开辟一块内存并初始化,并调用该对象的autorelease方法。若以上语句执行成功,就进行赋值。
    Student *stu= [[[Student alloc] init] autorelease];

    //2.由于_name变量在赋值时需要release旧值,copy新值,因此最好调用setName方法。
    stu.name = name;
    stu.age = age;
    stu.score = score;

    //3.返回创建好的对象
    return stu;
}

2.经验教训

1> 基础代码一定要多练几遍,总是在这么细小的地方出问题怎么办呀!赶紧亡羊补牢吧!这种错误伤不起!

2> 写程序时一定要多想。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值