oc的浅拷贝和深拷贝
来源:互联网 发布:程序员用外星人 编辑:程序博客网 时间:2024/04/25 22:17
浅拷贝
浅拷贝是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间。如:
char* str = (char*)malloc(100);char* str2 = str;
浅拷贝只是对对象的简单拷贝,让几个对象共用一片内存,当内存销毁的时候,指向这片内存的几个指针需要重新定义才能使用,要不然会成为野指针。
iOS中的浅拷贝
在iOS中,retain关键字就是一种更加保险的浅拷贝。它既能让几个指针共用同一片内存空间,又可以在release方法中不会轻易的销毁内存,达到更加简单使用的目的。
深拷贝:
深拷贝是指拷贝对象的具体内容,而内存地址是自主分配的,拷贝结束后,两个对象虽然存的值是相同的,但内存地址不一样,两个对象互不影响。
浅拷贝好比人和人的影子的关系,人消失影子消失。
深拷贝好比人和人的克隆人,人消失克隆人依然存在。
copy与retain的区别
copy是创建一个新对象,retain是创建一个指针,引用对象计数加一。copy属性标识两个对象内容相同,新的对象retain count为1,与旧对象引用计数无关,旧对象没有变化。copy减少对象上下文的依赖。
在非集合类对象中:对immutable对象进行copy操作,是指针复制,mutableCopy操作时内容复制;对mutable对象进行copy和mutableCopy都是内容复制。用代码简单表示如下:
[immutableObject copy] // 浅复制
[immutableObject mutableCopy] //深复制
[mutableObject copy] //深复制
[mutableObject mutableCopy] //深复制
比如以下代码:
NSMutableString *string = [NSMutableString stringWithString:@
"origin"
];
//copy
NSString *stringCopy = [string copy];
查看内存,会发现 string、stringCopy 内存地址都不一样,说明此时都是做内容拷贝、深拷贝。即使你进行如下操作:
[string appendString:@
"origion!"
]
stringCopy的值也不会因此改变,但是如果不使用copy,stringCopy的值就会被改变。 集合类对象以此类推。
- oc的浅拷贝和深拷贝
- OC浅拷贝和深拷贝
- oc中的深拷贝和浅拷贝
- OC学习 -- 浅拷贝和深拷贝
- OC中浅拷贝和深拷贝
- OC中的浅拷贝和深拷贝
- OC 中的深拷贝和浅拷贝
- OC浅拷贝和深拷贝
- oc 深拷贝和浅拷贝
- OC当中的深拷贝和浅拷贝
- OC 深拷贝、浅拷贝
- OC中的字符串属性(深拷贝和浅拷贝)
- 【OC学习-26】对象的浅拷贝和深拷贝——关键在于属性是否可被拷贝
- OC中关于copy和mutableCopy的使用 及深拷贝、浅拷贝的概念
- c++中 拷贝构造函数的深拷贝和浅拷贝--“浅拷贝”与“深拷贝”
- OC 详解深拷贝与浅拷贝
- swift/OC 深拷贝 浅拷贝
- Python对象的拷贝,浅拷贝和深拷贝。
- hdu1233 还是畅通工程(MST最小生成树)
- LLVM和Clang背后的故事
- Android下拉刷新上拉加载控件,对所有View通用
- UVA11384 Help is needed for Dexter (递归、找规律)
- 2.文件系统
- oc的浅拷贝和深拷贝
- 归并排序 Mergesort
- (HDU 5810)2016 Multi-University Training Contest 7 Elegant Construction (期望、方差、二项分布)
- android edittext不可编辑
- 欢迎使用CSDN-markdown编辑器
- hdoj 5556 Land of Farms 二分图匹配
- 计划的总括
- 欢迎使用CSDN-markdown编辑器
- Shell脚本学习(二)制作SSH登录远程服务器的Shell脚本