Foundation框架第十四弹:NSCopy的常用方法

Copy

要拷贝一个对象可以调用copy或者MutableCopy

遵守NSCopying之后才能调用Copy和MutableCopy方法

 NSString 和 block 在任何时候声明都使用copy;

1>区别:

 A.Copy产生一个不可变的副本

 B.MutableCopy:产生一个可变的副本

2>比较:

深复制:(内容拷贝,深拷贝)复制一个对象一个地址 (可变,不可变对象调用MutableCopy,可变对象调用copy三种情况)

*原对象和副本对象是不同的两个对象

*原对象引用计数器不变,副对象计数器为1(新产生的)

*本质:产生新对象

浅复制:(指针拷贝,浅拷贝)复制一个对象,但是地址还是引用一个(只有不可变对象调用copy的时候才是深复制)

*原对象和副本对象是一个对象

*原对象(副对象)引用计数器+1

*本质:没有产生对象

3>自定义copy需要实现copyWithZone:

- (id)copyWithZone:(NSZone *)zone

{

    // 1.注意返回值,这个方法中一定要返回一个新的Person对象

    // 2.注意下参数:zone忽略掉

    // 3.创建一个新的person兑现并返回

    对象 *x = [[self.class allocinit];

    x.属性 = self.属性;

    return x;

}


代码:

         /*

         A.任何对象调用Copy产生一个不可变的副本

         

         B.任何对象调用MutableCopy:产生一个可变的副本

         

         遵守NSCopying之后才能调用CopyMutableCopy方法

         */

        // copy产生不可变副本

        NSMutableArray *nsm = [NSMutableArray arrayWithArray:@[@"1",@"2",@"3"]];

        NSArray *n = [nsm copy];

        NSLog(@"%@",n);

        

        // MutavleCopy产生可变副本

        NSMutableArray *nsm1 = [NSMutableArray arrayWithArray:@[@"1",@"2",@"3"]];

        NSMutableArray *n1 = [nsm1 mutableCopy];

        [n1 addObject:@"4"];

        NSLog(@"%@",n1);



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值