浅复制:复制对象时,如果对象中包含对象类型的实例变量,只是复制指针。新对象中的对象类型实例变量和旧对象中的对象类型实例变量指的是同一个对象。任何一方实例变量对对象做修改,另一方实例变量指向的该对象也就改变了。

  .h声明文件

 1 //  Person.h
 2 //  03-对象复制
 3 //
 4 //  Created by ma c on 15/8/14.
 5 //  Copyright (c) 2015年. All rights reserved.
 6 //
 7
 8 #import <Foundation/Foundation.h>
 9
10 @interface Person : NSObject<NSCopying>//实现NSCopying协议才能支持自定义对象的复制

11 @property(nonatomic,retain)NSMutableString *name;//(retain)浅拷贝,拷贝对象的引用,其实用的还是一个对象,相当于一个人给自己起了一个别名
12 @property(nonatomic,assign)NSInteger age;
13 -(id)initWithName:(NSMutableString*)name andAge:(NSInteger)age;
14 -(void)show;
15 @end

  .m实现文件

 1 //  Person.m
 2 //  03-对象复制
 3 //
 4 //  Created by ma c on 15/8/14.
 5 //  Copyright (c) 2015年. All rights reserved.
 6 //
 7
 8 #import "Person.h"
 9
10 @implementation Person
11 -(id)initWithName:(NSMutableString*)name andAge:(NSInteger)age
12 {
13     self = [super init];
14     if(self)
15     {
16         _name = [name retain];//强引用,获得对象所有权
17         _age = age;
18     }
19     return self;
20 }
21 -(void)show
22 {
23     NSLog(@"name:%@,age:%lu",_name,_age);
24 }
25 -(void)dealloc
26 {
27     [_name release];
28     [super dealloc];
29 }
30 -(id)copyWithZone:(NSZone *)zone
31 {
32     return [[Person alloc]initWithName:_name andAge:_age];
33 }
34 @end

  main.m主函数

 1 //  main.m
 2 //  03-对象复制
 3 //
 4 //  Created by ma c on 15/8/14.
 5 //  Copyright (c) 2015年. All rights reserved.
 6 //
 7
 8 #import <Foundation/Foundation.h>
 9 #import "Person.h"
10 int main(int argc, const char * argv[]) {
11     @autoreleasepool {
12         // 测试Person类
13         NSMutableString *name = [NSMutableString stringWithString:@"Tom"];
14
15         Person *p1 = [[Person alloc]initWithName:name andAge:20];
16         [p1 show];
17
18         [name appendString:@"Jerry"];
19
20         Person *p2 = [[Person alloc]initWithName:name andAge:21];
21         [p2 show];
22
23         [p1 show];
24
25         //对象复制,自定义对象必须要实现NSCopying协议才能支持对象复制
26         Person *p3 = [p1 copy];
27         [p3 show];
28
29         [p1.name appendString:@"123"];//因为retain,p1和p2指向同一对象,一改都改
30         [p3 show];
31
32         NSMutableString *name2 = [NSMutableString stringWithString:@"Jobs"];
33         [p1 setName:name2];//p1和p3指向的是不同的对象,互不影响
34         [p3 show];
35
36         [p1 release];
37         [p2 release];
38         [p3 release];
39     }
40     return 0;
41 }

  测试结果如下:

2015-08-14 16:40:59.293 03-对象复制[1460:96685] name:Tom,age:20
2015-08-14 16:40:59.294 03-对象复制[1460:96685] name:TomJerry,age:21
2015-08-14 16:40:59.294 03-对象复制[1460:96685] name:TomJerry,age:20
2015-08-14 16:40:59.295 03-对象复制[1460:96685] name:TomJerry,age:20
2015-08-14 16:40:59.295 03-对象复制[1460:96685] name:TomJerry123,age:20
2015-08-14 16:40:59.295 03-对象复制[1460:96685] name:TomJerry123,age:20
Program ended with exit code: 0

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!
本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/4730496.html,如需转载请自行联系原作者

Objective-C:浅复制(拷贝)相关推荐

  1. JavaScript之浅复制【拷贝】与深复制【拷贝】【二】

    下面了解下什么浅复制[拷贝]和深复制[拷贝],通过下面的阅读你将了解到: 1.什么是浅复制以及使用场景 2.什么是深复制以及使用场景 3.浅复制和深复制有哪些方式 复制代码 一.我们先来了解下,Jav ...

  2. C++深复制(深拷贝)、浅复制(浅拷贝)和复制构造函数(拷贝构造函数)详解+实例

    转载出处:https://blog.csdn.net/sxhelijian/article/details/23209967 对象的复制 对于普通类型的对象来说,它们之间的复制是很简单的,例如: in ...

  3. python中复制、浅层拷贝、深层拷贝的区别

    python中复制.浅层拷贝.深层拷贝的区别 一.学习要点: 1.python中的复制与拷贝的区别 2.python中浅层拷贝与深层拷贝的区别 二.代码: import copy a=[1,2,3,4 ...

  4. 对象的深度复制和浅复制 (深度拷贝和浅拷贝)

    对象的深度复制和浅复制 (深度拷贝和浅拷贝) 作者:邓家海 时间:2018年2月11日 21:46:22 我们在实际的开发项目里面为了使得开发更加的便捷和方便,总会不经意的使用一些第三方的持久化框架( ...

  5. Golang 元素值在经过通道传递时会被复制,这个复制是浅复制

    1. channel 元素值为切片 package mainimport ("fmt" )func main() {ch := make(chan []int, 3)s := [] ...

  6. php5对象复制、clone、浅复制与深复制的区别与介绍

    对象复制的由来  为什么对象会有"复制"这个概念,这与PHP5中对象的传值方式是密切相关的,让我们看看下面这段简单的代码 PHP代码 * /**      * * 电视机类     ...

  7. javascript 数组和对象的浅复制和深度复制 assign/slice/concat/JSON.parse(JSON.stringify())...

    javascript 数组和对象的浅度复制和深度复制 在平常我们用 '='来用一个变量引用一个数组或对象,这里是'引用'而不是复制下面我们看一个例子引用和复制是什么概念 var arr=[1,2,3, ...

  8. python列表浅复制_Python列表的深复制和浅复制示例详解

    一.深复制与浅复制 列表是Python中自带的一种数据结构,在使用列表时,拷贝操作不可避免,下面简单讨论一下列表的深复制(拷贝)与浅复制 首先看代码: l1 = [5, 4, 3, 2, 1] # 用 ...

  9. java自我复制_原型模式--自我复制(结合Java浅复制与深复制)

    原型模式,字面上的理解,以原型为标杆的模式. 原型模式其实就是从一个对象再创建另外一个可定制对象,而且不需知道任何创建的细节. 我们可以用原型示例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. ...

最新文章

  1. Redis常见面试问题汇总及解析
  2. 题目 1093:【蓝桥杯】【入门题】字符逆序
  3. C#播放flash动画即swf文件
  4. html设置列表菜单,css 列表菜单的设计
  5. Qt 设置当前窗口出现在左右窗口的最前面
  6. Sklearn 0.21 中文文档校对活动 | ApacheCN
  7. 微软分拆小冰业务并独立发展,沈向洋任董事长
  8. html用js发post请求,使用js拼接表单发送post请求示例
  9. PLC通讯智能网关-不用PLC编程,实现西门子PLC与罗克韦尔(AB)PLC之间数据通讯
  10. cass道路设计教程_cass道路设计
  11. vba字典重复key_VBA字典技术整理
  12. Google自动翻译工具:对接谷歌翻译接口,实现本地化运行
  13. 西门子_Step7软件仿真方法
  14. 如何借用淘宝巧获海量精准流量?
  15. 如何编写Junit测试代码
  16. 听说月薪3万的公众号运营者,都偷偷藏了这些网站
  17. 数字图像处理 实验四:图像的重建与复原
  18. 7.项目成本管理+信息系统项目管理+野马合集
  19. 元素地牢服务器维修,《元素地牢》已正式开服!劝退地牢等你挑战!
  20. SMU Winter 2023 (div.2)1

热门文章

  1. python中字典和集合的区别_Python中字典和集合学习小结
  2. 【转载】从康耐视(NASDAQ : CGNX)看国内视觉识别行业的机会
  3. kubernetes入门指南(一)
  4. [ERR] Not all 16384 slots are covered by nodes.
  5. Tensorflow基础-mnist数据集
  6. 利用Delphi的File Of Type创建并管理属于你自己的数据库
  7. C++ explicit关键字
  8. linux系统的初化始配置
  9. 一个函数两个return
  10. cxf restful