美文网首页
深浅copy

深浅copy

作者: 小星星灬 | 来源:发表于2021-07-16 10:04 被阅读0次

深浅copy

浅拷贝:指针拷贝,复制一个新的指针,指向同一块内存区域。实际内存并没有发生拷贝

深拷贝:内容拷贝,拷贝数据到一块新内存区域,指针指向拷贝的数据区

浅复制很简单,只是简单的指针拷贝,所以改变原对象或者拷贝后的对象,都会影响另外一个对象。

为什么NSString的属性关键字一定要用copy呢?我用Strong不行吗?

strong会有一个问题,如果我用一个mutablestring赋值给这个strong属性,然后我修改这个mutablestring,你这个strong属性就会被修改,就不安全了,是不期望的结果。copy就没有这个问题。

@property(nonatomic,strong)NSString *tempStr;

NSMutableString *str = [[NSMutableString alloc]initWithString:@"1111"];

self.tempStr = str;

[str appendString:@"11123"];

NSLog(@"%@",self.tempStr);

输出111111123

copy: 对于可变对象为深拷贝,对于不可变对象为浅拷贝

mutableCopy:始终是深拷贝

在OC中不是所有的类都支持拷贝,只有遵循<NSCopying>才支持copy,只有遵循<NSMutableCopying>才支持mutableCopy。如果没有遵循,拷贝时会直接Crash。

如果是自定义类对象 需要遵循<NSCoding>否则在使用NSKeyedArchiver的时候会Crash。(完全拷贝NSKeyedUnarchiver)

 1、retain是对当前对象增加了一个指针指向,使对象的引用计数器加1, 是进行了一次安全的浅拷贝操作。

 2、copy是对当前对象进行了一次拷贝,重新拷贝了当前对象,当使用的时候减少了对当前对象的依赖。

浅拷贝:只是复制容器本身,不会复制容器内部的元素,浅拷贝后生成的新容器对象和原始容器对象共享内部元素

深拷贝:不仅复制容器本身,容器内部的元素也会复制,深拷贝后生成的新容器对象和原始容器的内部元素是独立的。

copy:不可变拷贝,遵循NSCopying协议,需要对应实现copyWithZone方法

mutableCopy:可变拷贝,遵循NSMutableCopying协议,需要对应实现mutableCopyWithZone:方法

相关文章

  • 内存管理

    ARC MRC 属性 循环引用 深浅copy一 ,先说深浅copy概念很简单 浅copy 就是copy...

  • 深浅copy

    概念:浅拷贝:不拷贝对象,只拷贝对象指针,因此不会产生新的对象。深拷贝:拷贝对象到新的内存,因此会产生新的对象。 ...

  • 深浅copy

    深浅copy 浅拷贝:指针拷贝,复制一个新的指针,指向同一块内存区域。实际内存并没有发生拷贝 深拷贝:内容拷贝,拷...

  • Python的直接赋值,深拷贝和浅拷贝以及使用场景

    概述 深浅拷贝用法来自copy模块导入模块: import copy浅拷贝: copy.copy深拷贝: copy...

  • IOS深浅Copy

    御用占位图: 验证下:“单层深拷贝”,可以看到mutableCopy后的数组的地址发生了改变,但是里面的内容没有改...

  • Python——"is" , "==" and "深浅copy"

    1."is" 和 "=="的区别是什么? == 比较的是变量的值 is 比较的是变量的内存地址 例如 : a = ...

  • python——深浅copy

    通过下面的输出结果可以很好的看到: 1)深拷贝是直接复制了所有的父对象跟子对象,原来的不管怎么变都跟他没关系 2)...

  • python five day

    深浅拷贝浅拷贝只copy一层,深拷贝完全拷贝 shallow copy Deep copydeepcopy 集合 ...

  • copy是什么

    目录表 故事背景 问题定位 解决方案 原理 copy是什么 copy如何实现 copy底层实现 延展之深浅拷贝 集...

  • 高级二.深浅copy

    1. ==,is的使用 2.拷贝 2.1 浅拷贝与深拷贝 浅拷贝是对于一个对象...

网友评论

      本文标题:深浅copy

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