objective-c 复制对象

对象的复制有深复制和浅复制两种,听上去高大上会很难,其实很简单;

来举个例子:

NSMutableArray * array1 = [NSMutableArray arrayWithObjects:@"a"  ,@"b", nil];
        NSMutableArray *array2 = array1;
        [array2 addObject:@"c"];
        for(NSString *s in array1)
        {
            NSLog(@"%@",s);
        }

输出结果:

2014-08-16 11:17:21.524 text[1679:303] a
2014-08-16 11:17:21.526 text[1679:303] b
2014-08-16 11:17:21.526 text[1679:303] c

看上面的,我们在array2中添加“c“,而遍里array1时却也有(array2中肯定也有c);

这就是浅复制,我们复制了数组array1的指针给array2,假设array1指向oxfffff这个区域,现在我们将array2 =array1是将array1指向的地址赋值给了array2,当我们操作array2时实际上是操作的那块区域,而array1也指向那块区域,所以就会出现这个结果;

这就是浅复制;

深复制:
上面的例子中,如果要想修改array2,而array1不变就需要使用深复制。深复制有可变复制和不可变复制,意思就是复制体可不可以变,就像nsarray是不可变的而nsmutablearry是可变的。需要用到 copy和mutablecopy方法;

如果是系统提供的类,如NSArray、NSString等可以直接使用copy、mutablecopy方法;

如果是自己创建的类,我们需要来实现代理<NSCopying> 

需要实现里面的

-(id)copyWithZone:(NSZone *)zone

-(id) mutableCopyWithZone:(NSZone *)zone

方法,一个代表着是不可变复制,一个是可变复制;

实现方法:

-(id)copyWithZone:(NSZone *)zone
{
    first *new = [[first allocWithZone:zone]init];
    new.string = self.string;
    return new;
}
-(id) mutableCopyWithZone:(NSZone *)zone
{
    first *new  = [[first allocWithZone:zone]init];
    new.string = self.string;
    return new;
}

看一下代码其实就明白深复制是什么意思了,深复制就是重新开辟一块空间,用原来的值进行初始化;

就是这样;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值