iOS Copy之深复制浅复制

2019-09-25  本文已影响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后都是不可变的对象。

上一篇下一篇

猜你喜欢

热点阅读