IOS对象复制问题

来源:互联网 发布:中科大源码镜像站 编辑:程序博客网 时间:2024/05/22 13:59

某次面试,面试官写出一段代码,问我这段代码有什么问题吗:

具体代码如下:

@implementation Person
- (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来创建一个新的字符串对象。

终于明白两者的差别了吧!哈哈。。。