美文网首页
理解深浅拷贝

理解深浅拷贝

作者: coder袁 | 来源:发表于2018-11-14 12:20 被阅读0次
  • 浅拷贝就是拷贝后,并没有进行真正的复制,而是复制的对象和原对象都指向同一个地址
  • 深拷贝是真正的复制了一份,复制的对象指向了新的地址
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

相关文章

  • 理解深浅拷贝

    浅拷贝就是拷贝后,并没有进行真正的复制,而是复制的对象和原对象都指向同一个地址 深拷贝是真正的复制了一份,复制的对...

  • 深浅拷贝理解

    先看最简单的赋值 (a=b) 浅拷贝 补充说明浅拷贝 如图 深拷贝

  • 理解深浅拷贝以及深浅拷贝的方法

    先考虑一种情况,对一个已知对象进行拷贝,编译系统会自动调用一种构造函数——拷贝构造函数,如果用户未定义拷贝构造函数...

  • Python深浅拷贝理解

    一、赋值在python中,对象的赋值就是简单的对象引用,这点和C++不同。如下:list_a = [1,2,3,"...

  • iOS 面试解析|对深浅拷贝的理解

    对深浅拷贝的理解 我们先要理解拷贝的目的:产生一个副本对象,跟源对象互不影响。 深拷贝和浅拷贝的区别 拷贝类型拷贝...

  • 简介深浅拷贝

    深浅拷贝 python 直接赋值,浅拷贝和深拷贝 直接赋值 其实就是对象的引用 (可以理解成浅拷贝) 浅拷贝: 拷...

  • 2018-08-29

    深浅拷贝 1.根据拷贝内容的不同,分为深浅拷贝 深拷贝:内容...

  • python 深浅拷贝 属性获取,垃圾回收

    说下对python深浅拷贝的理解。并有代码简单实现 浅拷贝:浅拷贝是对于一个对象的顶层拷贝,拷贝了引用,并没有拷贝...

  • 高级编程(深浅拷贝,生成器,迭代器,装饰器)

    1.简答 说下对python深浅拷贝的理解。并有代码简单实现 ①只有一层深浅拷贝没区别: 都是 1、如果是可变,地...

  • 深入理解深浅拷贝

    再次深入探究了深浅拷贝的东西。非容器类和容器类的深浅拷贝大致相似,不可变类型的copy拷贝是浅拷贝,mutable...

网友评论

      本文标题:理解深浅拷贝

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