某次面试,面试官写出一段代码,问我这段代码有什么问题吗:
具体代码如下:
- (void)setName:(NSString*)newName {
self.name = newName;
}
@end
咋看之下,这不就是定义Person类中的属性age的setter方法嘛。但是跟我们的书写习惯有点不一样,感觉怪怪的!还是先写出我们的习惯写法吧!
@implementation Person
- (void)setName:(int)newName {
if(self.Name!=newName){
[self.Name release];
self.Name = [newAge copy];
}
}
@end
可以看到我们的习惯写法基本上不会出现什么问题,而最前面的那种写法会有问题呢?
最前面的写法的结果是name和newName都指向了同一个对象。当在调用setName:方法之后,如果newName的值被修改,那么name的值也将被修改,这应该不是我们想要的结果吧(如果你是想达到这种效果,个人认为,这样写也是一种绝妙的写法)!所以用copy来拷贝newName的值到name上,其实现的是调用一个alloc方法加上initWithString:newName来创建一个新的字符串对象。
终于明白两者的差别了吧!哈哈。。。