copy、mutableCopy详解
来源:互联网 发布:人工智能各个方面英文 编辑:程序博客网 时间:2024/05/16 15:15
首先呢,copy后得到的对象都是不可变的,mutableCopy后得到的对象都是可变的。
1、非容器对象(NSString)
(11) 如果源对象是不可变的:111. 那么copy后的对象(返回对象是不可变的)、源对象 都是同一个对象,对象的地址是一样的。既然指针地址都一样,那么指向的内容肯定也是一样的。俗称“浅拷贝”。Foundation框架中支持复制的类,默认是浅拷贝。
112. mutableCopy俗称“深拷贝”,会拷贝对象的地址以及内容,指针的地址(栈地址),指针指向的内容地址(堆地址)都会变。返回一个可变的对象。
(12) 如果源对象是可变的(NSMutableString):
121.这时候copy和mutableCopy都是深拷贝,会拷贝整个对象,对象的地址和内容都会拷贝。但是copy返回的对象是不可变的,文章开头已说明。
2、容器对象(NSArray、NSDictionary、NSSet等)
(21) 如果源对象是不可变的:
211. copy后,这一点和上面的111是一模一样的。
212. mutableCopy只拷贝对象的地址,但是容器的内容(即容器内的对象)并没有拷贝,指针指向的内容地址(堆地址)没有变,也就是说两个指针同时指向一块内存区域。返回一个可变的对象。那么我们要做到真正意义上的深拷贝(拷贝容器以及容器的内容),那么就得遍历容器,直到容器里面的对象不是容器对象为止,再把遍历后每一个对象进行mutableCopy,返回一个新的可变对象才对。
(22) 如果源对象是可变的:
221. 这时候copy和mutableCopy同样只拷贝对象的地址,但是容器的内容(即容器内的对象)并没有拷贝,指针指向的内容地址(堆地址)没有变,也就是说两个指针同时指向一块内存区域。返回一个可变的对象。那么我们要做到真正意义上的深拷贝(拷贝容器以及容器的内容),那么就得遍历容器,直到容器里面的对象不是容器对象为止,再把遍历后每一个对象进行mutableCopy,返回一个新的可变对象才对。
- copy、mutableCopy详解
- copy、mutableCopy详解
- copy 、mutableCopy
- Copy & MutableCopy
- copy mutableCopy
- copy && mutableCopy
- 深拷贝和浅拷贝(mutableCopy和Copy)详解
- 深拷贝和浅拷贝(mutableCopy和Copy)详解
- IOS开发之深拷贝、浅拷贝、mutableCopy、Copy详解
- 深拷贝和浅拷贝(mutableCopy和Copy)详解
- 深拷贝和浅拷贝(mutableCopy和Copy)详解
- 深拷贝和浅拷贝(mutableCopy和Copy)详解
- 深拷贝(mutablecopy)与浅拷贝(Copy)详解
- 深拷贝与浅拷贝(mutableCopy与Copy)详解 iOS
- 深拷贝与浅拷贝(mutableCopy与Copy)详解
- 深拷贝(mutableCopy)与浅拷贝(Copy)详解
- 深拷贝和浅拷贝(mutableCopy和Copy)详解
- mutableCopy与COPY区别
- Android输入法框的梳理
- IIS服务器不能下载.apk文件的解决步骤
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台十五(C#开发)-空间数据导出
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台十六(C#开发)-空间数据编辑(上)
- java内存区域与内存溢出异常(1)
- copy、mutableCopy详解
- Citrix Xenserver 6 安装注册激活步骤
- 三运输层(一)运输层概述
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台十七(C#开发)-空间数据编辑(下)
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台十八(C#开发)-数据字典编辑
- webService使用工具wsgen和wsimport
- 三运输层(二)UDP用户数据报协议
- Hibernate Lazy设置解析
- 让你自己写的Android的Launcher成为系统中第一个启动的,也是唯一的Launcher