OC中的深浅拷贝(copy, MutableCopy)
2016-04-05 00:00
253 查看
int main(int argc, const char * argv[]) { @autoreleasepool { //------------------不可变的对象------------------- //创建一个字符串型a NSString *a = @"abcdefg"; //浅拷贝a,只是引用了一下,打印出来地址是一样的 //这里如果把浅拷贝出来的a1的值改变了,源a是不会跟着变的,a1会自动生成一个新的对象,和a是不同的地址 NSString *a1 = [a copy]; //深拷贝a,直接克隆了一下,打印出来是不同的地址 NSString *a2 = [a mutableCopy]; //打印a,a1,a2的值,比较一下 NSLog(@"%@ %@ %@", a, a1, a2); //打印a,a1,a2的地址,比较一下 NSLog(@"%p %p %p", a, a1, a2); //------------------可变的对象--------------------- NSMutableString *b = [NSMutableString stringWithString:@"abcdefg"]; //对可变对象不论是浅拷贝还是深拷贝,都是直接克隆了对象出来,都是不同的地址 NSMutableString *b1 = [b copy]; NSMutableString *b2 = [b mutableCopy]; NSLog(@"%@ %@ %@", b, b1, b2); NSLog(@"%p %p %p", b, b1, b2); } return 0; }
对一不可变对象复制,copy是指针复制(浅拷贝)和mutableCopy就是对象复制(深拷贝)。
如果是对可变对象复制,都是深拷贝,但是copy返回的对象是不可变的。
可以使用copy的类:
NSNumber,
NSString,
NSMutableString,
NSDictionary,
NSMutableDictionary,
NSArray,
NSMutableArray,
NSSet,
NSMutableSet
相关文章推荐
- 最齐全的红帽认证架构师RHCA职业学习路线图
- 大型网站分布式缓存技术
- windows tomcat开机启动 以及 开机启动的catalina.bat配置无效解决
- [转载]linux shell 中"2>&1"含义
- Android——Tomcat+MySQL+Servlet,实现将Client传入的数据写入MySQL
- 全球最受欢迎的十大Linux发行版(图)
- 初学linux相关问题1
- Block 为什么要用copy属性
- centos7下安装telnet服务器
- shell文本处理
- CentOS下安装JDK1.7
- 论docker中 CMD 与 ENTRYPOINT 的区别
- Shell - 13
- linux su命令参数及用法详解
- 理解Linux系统负荷
- Linux内核转发技术
- linux学习笔记(一)
- nginx详解及配置
- 360网站服务监控
- 大众点评Cat--架构分析