浅拷贝、深拷贝


     copymutableCopy

     copy:不管是可变的,还是不可变的,结果都是不可变的

     mutableCopy:不管是不可变的,还是可变的,结果都是可变的


   NSMutableString *str = [NSMutableString stringWithFormat:@"a"];

    NSArray *arr1 = @[str,@"b"];

    NSArray *arr2 = [arr1 copy];  

    

    [str setString:@"c"];

    NSLog(@"%@",arr2);   


    

   //自定义的类需要实现copy的话,需要遵守协议NSCopying

    @interface UserItem : NSObject<NSCopying,NSMutableCopying>


    @property(nonatomic,retain)NSMutableString *name;


    @end


    

    @implementation UserItem


    //系统没事调用alloc,就相当于调用了allocWithZone

   //系统每次调用copy的话,就相当于调用了copyWithZone

   -(id)copyWithZone:(NSZone *)zone

   {

    //实质上创建了一个新的item对象,把它的值赋值过来

    UserItem *user = [[[self class] alloc] init];

    user.name = self.name;

    return user;

  }

   //深拷贝

  -(id)mutableCopyWithZone:(NSZone *)zone

  {

    UserItem *user = [[[self class] alloc] init];

    user.name = [self.name mutableCopy];   

    return user;

  }

  @end 


    UserItem *user = [[UserItem alloc] init];

    user.name = [NSMutableString stringWithFormat:@"潘松彪"];

    

//    UserItem *user2 = [user copy];    //浅拷贝

//    [user.name setString:@"李力卓”];   

    

    UserItem *user3 = [user mutableCopy];  //深拷贝

    NSLog(@"%@",user3.name);



   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值