使用copy来拷贝对象

拷贝对象

您通过将 copy 消息发送给对象,以制作对象的副本。

NSArray *myArray = [yourArray copy];

要拷贝,接收对象的类必须遵守 NSCopying 协议。如果想要对象可供拷贝,必须采用并实施此协议的 copy 方法。

有时,当您想要确保对象的状态在使用时不会更改,会拷贝从程序的其他地方获取的对象。

拷贝行为是特定于某一个类的,具体取决于实例的特定性质。大多数类实现深拷贝,即复制所有实例变量和属性;部分类(如集类)实现浅拷贝,即仅复制对这些实例变量和属性的引用。

具有可变变体和不可变变体的类也声明 mutableCopy 方法,来创建对象的可变副本。例如,如果在 NSString 对象上调用 mutableCopy,您会获得 NSMutableString 的实例。

时间: 2024-11-05 20:07:33

使用copy来拷贝对象的相关文章

objective-c copy mutableCopy 拷贝对象

原来不是所有的对象都支持 copy 只有遵守NSCopying 协议的类才可以发送copy消息 只有遵守NSMutableCopying 协议的类才可以发送mutableCopy消息 假如发送了一个没有遵守上诉两协议而发送 copy或者 mutableCopy,那么就会发生异常 默认 nsobject没有遵守这两个协议 但是 copy和mutableCopy这两个方法是nsobject定义的 如果想自定义一下copy 那么就必须遵守NSCopying,并且实现 copyWithZone: 方法

Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)

http://www.jb51.net/article/15714.htm 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.2. copy.deepcopy 深拷贝 拷贝对象及其子对象 一个很好的例子: 1 import copy 2 a = [1, 2, 3, 4, ['a', 'b']] #原始对象 3 4 b = a #赋值,传对象的引用 5 c = copy.copy(a) #对象拷贝,浅拷贝 6 d = copy.deepcopy(a) #对象拷贝,深拷贝

夺命雷公狗—angularjs—23—copy拷贝对象

copy这在angularjs中是一个拷贝对象的方法: <!DOCTYPE html> <html lang="en" ng-app="myapp"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="js/angular.min.js"></script>

Copy constructor拷贝构造函数

翻译的是wikipedia关于copy constructor,地址:点击打开链接 拷贝构造函数是C++语言中用一个已有对象创建一个新对象的特殊构造函数,该函数的第一个参数必须是函数所在类型的引用(译注:const/non-const都可以,可以有多个参数剩余参数必须有默认值,一定要是引用,这些原因见后,问:有多个参数拷贝构造如何调用?). 通常编译器会自动为每一个class创建一个拷贝构造函数(显示拷贝构造);有些情况下程序员自定义了拷贝构造函数(用户自定义拷贝构造),这时编译器不合成拷贝构造

Item 12:完整地拷贝对象(拷贝构造函数、复制运算符) Effective C++笔记

Item 12: Copy all parts of an object 在一个成熟的面向对象的C++系统中,只有两种拷贝对象的方式:复制构造函数和赋值运算符, 不妨称他们为拷贝函数. 拷贝函数属于编译器默认生成的函数(参考:Item 5:那些被C++默默地声明和调用的函数), 默认的拷贝函数确实会完整地拷贝对象,但有时我们选择重载拷贝函数,问题就出在这里! 一个正确拷贝函数的实现是这样的: class Customer{ string name; public: Customer::Custo

拷贝对象属性

        /**  * 拷贝属性到目标对象,如果为空不拷贝,目标对象属性有值,则不拷贝该属性  *   * @param source  *            待拷贝属性的对象  * @param target  *            目标对象  * @throws BeansException  */ public static void copyPropertiesExclude(Object source, Object target) throws BeansExcepti

Java 使用反射拷贝对象一般字段值

在<Java解惑>上面看到第八十三例--诵读困难者,要求使用非反射实现单例对象的拷贝.查阅了部分资料,先实现通过反射拷贝对象. 1. 编写需要被拷贝的对象Person package com.scl.j2se.reflectjavabean; public class Person { public String getName() { return name; } public void setName(String name) { this.name = name; } public St

Python:使用copy模块深拷贝对象

Python语言中有深拷贝和浅拷贝的概念,那什么是深拷贝,浅拷贝呢? 浅拷贝(shallow copy):构造一个新的复合对象并将从原对象中发现的引用(也就是地址,而不是地址所指向的内容)插入该对象中.浅拷贝的实现方法有很多种,如工厂函数.切片操作.copy模块中的copy操作. 深拷贝(deep copy):也构造一个新的复合对象,但是遇到引用会继续递归拷贝其所指向的内容,也就是说他会针对引用所指向的对象继续执行拷贝,因此产生的对象不受其它对象操作的影响.深拷贝的实现需要依赖copy模块的de

关于js拷贝对象的问题

在使用vue的时候遇到一个需求需要备份一个多维数组对象,用了好几种方法得到的结果都是相互连带影响的,无法做到在修改原数组的基础上,copy出一份为改动过的原数据,看了下网上各路大仙的套路,还是不能深信,还是自己动手看看最好了. 首先是例子1,假如是一个单纯简单的数组对象: // ------------情况1------------ var arr = [0,1,2,3]; var arr1 = arr; var arr2 = arr.slice(0); var arr3 = JSON.pars