理解深浅拷贝

  • 浅拷贝就是拷贝后,并没有进行真正的复制,而是复制的对象和原对象都指向同一个地址
  • 深拷贝是真正的复制了一份,复制的对象指向了新的地址
NSDictionary *dic = @{@"key1":@"1",@"key2":@"2",@"key3":@"3"};
NSDictionary *dict = dic.mutableCopy;
NSLog(@"dic地址 = %p,dict地址 = %p",dic,dict);
//
NSDictionary *dic = @{@"key1":@"1",@"key2":@"2",@"key3":@"3"};
NSDictionary *dict = dic.copy;
NSLog(@"dic地址 = %p,dict地址 = %p",dic,dict);
//
单拿字符串来验证(数组以及字典结果与其一致,不做展示)
NSString *str1 = @"str";
NSString *str2 = str1.copy;  
NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
#打印结果地址不变
//str1地址 = 0x10b2f3630,str2地址 = 0x10b2f3630  
NSString *str1 = @"str";
NSString *str2 = str1.mutableCopy;  
NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
#打印结果地址变了
//str1地址 = 0x10b032630,str2地址 = 0x6000014a0030
NSString *str1 = @"str";
NSMutableString *str2 = str1.copy;
NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
#打印结果地址不变
//str1地址 = 0x10d9ea630,str2地址 = 0x10d9ea630
NSString *str1 = @"str";
NSMutableString *str2 = str1.mutableCopy;
NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
#打印结果地址变了
//str1地址 = 0x10ac95630,str2地址 = 0x600001ad4000
NSMutableString *str1 = [NSMutableString stringWithString:@"str1"];
NSString *str2 = str1.copy;
NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
#打印结果地址变了
//str1地址 = 0x60000154ae50,str2地址 = 0xff39850259afb90d
NSMutableString *str1 = [NSMutableString stringWithString:@"str1"];
NSString *str2 = str1.mutableCopy;
NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
#打印结果地址变了
//str1地址 = 0x6000035e75a0,str2地址 = 0x6000035e6df0
NSMutableString *str1 = [NSMutableString stringWithString:@"str1"];
NSMutableString *str2 = str1.copy;
NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
#打印结果地址变了
//str1地址 = 0x600000831260,str2地址 = 0x87c4bdb0e6f8bfc3
NSMutableString *str1 = [NSMutableString stringWithString:@"str1"];
NSMutableString *str2 = str1.mutableCopy;
NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
#打印结果地址变了
//str1地址 = 0x6000002b6160,str2地址 = 0x6000002b6190

"再来看看下面的"
NSString *str1 = [NSMutableString stringWithString:@"str1"];
NSString *str2 = str1.copy;
NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
#打印结果地址变了
//str1地址 = 0x6000025cb0f0,str2地址 = 0xcfde541c74c6ab89
NSString *str1 = [NSMutableString stringWithString:@"str1"];
NSString *str2 = str1.mutableCopy;
NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
#打印结果地址变了
//str1地址 = 0x600000f7bd80,str2地址 = 0x600000f7be10
NSMutableString *str1 = @"str";
NSString *str2 = str1.copy;
NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
#打印结果地址不变
//str1地址 = 0x10d186630,str2地址 = 0x10d186630
NSMutableString *str1 = @"str";
NSString *str2 = str1.mutableCopy;
NSLog(@"str1地址 = %p,str2地址 = %p",str1,str2);
#打印结果地址变了
//str1地址 = 0x109e17630,str2地址 = 0x60000217c3f0

你可能感兴趣的:(理解深浅拷贝)