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> 写程序时一定要多想。