iOS Copy之深复制浅复制

面试必考察的iOS基础原理--深复制,浅复制,过一段时间总是会混淆,写下demo帮助理清概念
不可变字符串:

NSString *str = @"testStr";
NSString *copyStr = [str copy];
NSString *mcopyStr = [str mutableCopy];
NSLog(@"不可变:%p-----copy: %p----mcopy: %p",str,copyStr,mcopyStr);
打印结果:
不可变:0x106d6a068-----copy: 0x106d6a068----mcopy: 0x60000038e6d0

可变字符串:

NSMutableString *mStr = [[NSMutableString alloc] initWithString:@"mutabTestStr"];
NSString *copyMstr1 = [mStr copy];
NSMutableString *copyMstr2 = [mStr copy];
NSMutableArray *mCopyMStr = [mStr mutableCopy];
//    [copyMstr2 appendString:@"addStr"];
NSLog(@"可变:%p--copy1: %p--copy2: %p--mcopy: %p",mStr,copyMstr1,copyMstr2,mCopyMStr);
打印结果:
可变: 

对于非集合类对象:
不可变对象进行copy是内存地址复制,没有产生新的对象,为浅拷贝;
不可变对象进行mutableCopy是内容复制,产生了新的对象,为深拷贝。

可变对象进行copy和mutableCopy都是内容复制,产生了新的对象,为深拷贝。
另外在执行[copyMstr2 appendString:@"addStr"];会导致Crash,原因是对象进行copy后都是不可变的对象。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我不和你结夫妻的缘, 但我与你允同修梵行的诺。 我若得遇明师, 必记挂你还在红尘漂泊。 我若得度,必来度你。
    安详〇阅读 3,490评论 0 0
  • 我爱我的朋友们 每一个 天天主动说 她家在后门 不远 反正都不着急 一起送她吧 真的超级惊喜 被所有人一起送到家门...
    NBeginning阅读 819评论 0 0
  • 妈妈,我等了你二十年 作者:佚名 || 朗诵:一申过客 妈妈,那一定是你,我听到了 那手工的绣花布鞋,踏在地上的声...
    z17沙鸥阅读 1,618评论 0 0
  • 文/殷小氿 我和我的心来到这片城 看到了一个 洗也洗不尽春色的女子 可是他只属于这个城市 那个无风的夜晚 我遇见了...
    氿公子阅读 2,463评论 17 23
  • 我用这本书介绍的方法来分析这两篇。 一、它讲了什么? 第三篇介绍了不同类型读物的不同阅读方法,我重点看了实用性的书...
    阳关丹阳阅读 832评论 0 0