IOS 关于对象的复制问题


最近在学习IOS的程序,根据IOS5基础教程编码,在第8章的Search时,提到一个深度复制的概念,后来重新学习了下Objective-C中的copy,mutablecopy,以及其他一些方法,先将相关学习经验记录下来。

XCODE 版本是4.6.3 模拟器是IPHONE6.1,在测试时发现与很多书上,以及网上的资料不符合,不知道是不是苹果新的编译器改动的问题。

1.针对非容器类型

如 NSString,NSMutableString 
   
如果对一不可变对象复制,copy是指针复制(浅拷贝)和mutableCopy就是对象复制
使用mutableCopy复制完后,对象是相互独立;
如下:
    
  NSString *string1=[[NSStringalloc] initWithFormat:@"1111"];
    NSString *string2=[string1 copy];
    //string2 是string1 的指针复制
     NSMutableString *mstring3=[[NSMutableStringalloc] init];
    [mstring3 appendString:string1];
     // 关于 appendString的使用在后面章节将会介绍,其实这时一个对象复制(深拷贝)
    NSMutableString *mstring4=[mstring3 mutableCopy];
    //使用mutableCopy后 mstring4拥有了和mstring3一样的内容,但是他们所指向的对象时完全不同的

    NSLog(@"string1 %@",string1);
    NSLog(@"string2 %@",string2);
    NSLog(@"string3 %@",mstring3);
    NSLog(@"string4 %@",mstring4);
    
    [mstring3 appendString:@"22222"];
     //通过修改mstring3 ,可以发现因为其使用了 appendString,所以他与string1已经是2个不同的对象了
     //因为mstring4使用的是mutableCopy,这也是一个深拷贝,所以mstring4也没有收到影响
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值