美文网首页
iOS Copy之深复制浅复制

iOS Copy之深复制浅复制

作者: 做个有趣的程序员 | 来源:发表于2019-09-25 14:30 被阅读0次

面试必考察的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后都是不可变的对象。

相关文章

网友评论

      本文标题:iOS Copy之深复制浅复制

      本文链接:https://www.haomeiwen.com/subject/hzpnectx.html