关于Java和OC深浅复制的问题
来源:互联网 发布:有线网络 编辑:程序博客网 时间:2024/05/20 23:03
昨天做项目的时候才发现Java和OC的深浅复制和Java的完全相反,Java的深复制是复制对象的地址,即两个对象有相同的内存地址(或者说这是同一个对象),而浅复制才是复制是一个新的对象,即新开辟一个新的内存地址,属性通过赋值传递。
下面是Java的一个例子:
public class Main { public static void main(String[] args) throws CloneNotSupportedException { Cat cat = new Cat(); cat.setName("猫"); //深复制 Cat cat1 = cat; //浅复制 Cat cat2 = (Cat) cat.clone(); System.out.println("原对象cat的地址:" + cat); System.out.println("深复制cat1的地址:" + cat1); System.out.println("浅复制cat2的地址:" + cat2); }}class Cat implements Cloneable { private String name; public Cat() { } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public Object clone() throws CloneNotSupportedException { return super.clone(); }}
而OC的深浅复制(OC通常称为拷贝)和Java正好相反:
- 浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间。
- 深拷贝是指拷贝对象的具体内容,而内存地址是自主分配的,拷贝结束之后,两个对象虽然存的值是相同的,但是内存地址不一样,两个对象也互不影响,互不干涉。
OC中关键字retain
,copy
和mutableCopy
的区别
retain:始终是浅复制。引用计数每次加一。返回对象是否可变与被复制的对象保持一致。
copy:对于可变对象为深复制,引用计数不改变;对于不可变对象是浅复制,
引用计数每次加一。始终返回一个不可变对象。
mutableCopy:始终是深复制,引用计数不改变。始终返回一个可变对象。
下面是OC的例子:
NSString* string = @"源字符串"; NSString* stringCopy = [string copy];// stringCopy与string地址相同,retainCount+ 1 NSMutableString* stringMCopy = [string mutablecopy];// stringMCopy与string地址不同 NSMutableString* stringM1 = [stringMCopy copy];//地址与stringMCopy不同,且为不可修改NSMutableString* stringM2 = [stringMCopy mutablecopy];//地址与stringMCopy不同,可修改
阅读全文
0 0
- 关于Java和OC深浅复制的问题
- OC深浅复制问题
- OC中的深浅复制
- oc笔记-深浅复制
- oc-深浅复制
- OC中的深浅拷贝(深浅复制)
- iOS开发-Day22-OC 延展和协议以及深浅复制
- 关于深浅复制
- java深浅拷贝(复制)
- java深浅拷贝(复制)
- java中的深浅复制
- 深浅复制的区别
- 浅谈OC(object-c)中深浅复制
- 深浅复制和属性为copy,strong值得变化问题?
- 关于深浅拷贝问题
- 详谈OC(object-c)深浅复制/拷贝-什么情况下用retain和copy
- 详谈OC(object-c)深浅复制/拷贝-什么情况下用retain和copy
- 详谈OC(object-c)深浅复制/拷贝-什么情况下用retain和copy
- 解决Altium画pcb时出现Unknown Pin的情况
- angularJS指令ng-repeat生成的dom元素js获取不到
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论九:最小生成树
- jquery点击事件
- 关于Java和OC深浅复制的问题
- jar包(依赖)
- 大学毕业论文指导-内容陈述
- 如何在 Linux 系统中通过用户组来管理用户
- 配置服务器双击环境下的数据库Oracle11gR2
- spring装配bean
- ros中cmake编译问题及cmakelist书写问题
- linux下搭建sphinx+scws+mysql中文分词搜索,及sphinx配置文件详解
- 实验2 Linux下基本编程