#import <Foundation/Foundation.h>

@interface Father : NSObject <NSCopying,NSMutableCopying>
@property (nonatomic,copy) NSString *name;
@property (nonatomic,retain) NSNumber *age;
-(id) initWithName:(NSString *)name withAge:(NSNumber *) age;
@end
#import "Father.h"
#import "Child.h" @implementation Father -(id) initWithName:(NSString *)name withAge:(NSNumber *) age{
self=[super init];
if(self!=nil){
_name=name;
_age=age;
}
return self;
}
//浅拷贝
-(id) copyWithZone:(NSZone *)zone{
Father *father=[[[self class] allocWithZone:zone] init];
father.name=_name;
father.age=_age;
return father;
} //深拷贝
- (id)mutableCopyWithZone:(NSZone *)zone{
Father *father=[[[self class] allocWithZone:zone] init];
father.name=[_name mutableCopy];
father.age=[_age copy];
return self;
}
 NSLog(@"-------自定义对象浅拷贝---------");
//浅拷贝学习
Father *father=[[Father alloc] initWithName:@"caitou" withAge:[NSNumber numberWithInt:23]];
Father *father2=[father copy];
NSLog(@"对象地址:%p",father);
NSLog(@"对象地址:%p",father2);
NSLog(@"对象属性地址name:%p",[father name]);
NSLog(@"对象属性地址name:%p",[father2 name]);
NSLog(@"对象属性地址age:%p",[father age]);
NSLog(@"对象属性地址age:%p",[father2 age]); NSLog(@"--------自定义对象深拷贝---------");
//深拷贝
Father *father4=[[Father alloc] initWithName:@"caitou" withAge:[NSNumber numberWithInt:25]];
Father *father3=[father4 mutableCopy];
NSLog(@"对象地址:%p",father4);
NSLog(@"对象地址:%p",father3);
NSLog(@"对象属性地址name:%p",[father4 name]);
NSLog(@"对象属性地址name:%p",[father3 name]);
NSLog(@"对象属性地址age:%p",[father4 age]);
NSLog(@"对象属性地址age:%p",[father3 age]); NSLog(@"-------浅拷贝---------");
NSArray *array1=[[NSArray alloc] initWithObjects:@"sdf", nil];
NSArray *array2=[array1 copy];
NSLog(@"%p",array1);
NSLog(@"%p",array2); NSLog(@"-------深拷贝---------");
NSMutableArray *mutableArray=[NSMutableArray arrayWithObject:@"sdfdf" ];
NSMutableArray *mutableArray2=[mutableArray mutableCopy];
NSLog(@"%p",mutableArray);
NSLog(@"%p",mutableArray2);
//总结:当copy一个不可变对象时,相当有retain,即引用记数加一,其他情况copy,mutablecopy都会分配空间复制内容

浅拷贝,深拷贝---ios的更多相关文章

  1. JS中有关对象的继承以及实例化、浅拷贝深拷贝的奥秘

    一.属性的归属问题 JS对象中定义的属性和方法如果不是挂在原型链上的方法和属性(直接通过如类似x的方式进行定义)都只是在该对象上,对原型链上的没有影响.对于所有实例共用的方法可直接定义在原型链上这样实 ...

  2. $.extend()浅拷贝深拷贝

    参考网址:http://bijian1013.iteye.com/blog/2255037 jQuery.extend() 函数用于将一个或多个对象的内容合并到目标对象. 注意:1. 如果只为$.ex ...

  3. Python__学习路上的坑之--引用,浅拷贝,深拷贝

    copy : 相当于只是拷贝表面一层,如果里面还有深层次的引用,那么也是直接拷贝引用的地址,而且如果拷贝对象是不可变类型比如元组,那么也是直接拷贝引用. deepcopy: 无论是拷贝可变类型还是不可 ...

  4. Python中的浅拷贝 深拷贝

    浅拷贝只拷贝父对象,子对象的地址空间不改变,包括下面三种: 1. copy 从下面的例子可以看出对象c从a拷贝,当对象a增加一个列表元素之后,c对象没有改变, 而当对象a中的子列表改变时,对象c的子列 ...

  5. 浅拷贝 &&&深拷贝 实现

    1.浅拷贝 //1.直接赋值给一个变量 //浅拷贝 //2.Object.assign() //浅拷贝 let obj4={} let obj5={money:50000} obj4.__proto_ ...

  6. javascript浅拷贝深拷贝详解

    一.浅拷贝 浅拷贝在现实中最常见的表现在赋值上面,例如 <!DOCTYPE html> <html lang="en"> <head> < ...

  7. js库 - 浅拷贝 & 深拷贝

    学了堆栈内存空间,应该就理解了什么叫简单数据类型存在栈内存,复杂数据类型存在堆内存了. 然后面试中经常会问.业务中也经常会遇到的问题就是深浅拷贝的问题了. 栈内存中简单数据类型直接拷贝就能得到一个副本 ...

  8. PythonStudy1——Python 值拷贝 浅拷贝 深拷贝

    拷贝:对值进行复制的过程 # 值拷贝:应用场景最多  ls = [1, 'abc', [10]] ls1 = ls # ls1直接将ls中存放的地址拿过来  # ls内部的值发生任何变化,ls1都会随 ...

  9. python中赋值-浅拷贝-深拷贝之间的关系

    赋值: 变量的引用,没有拷贝空间 对象之间赋值本质上 是对象之间的引用传递而已.也就是多个对象指向同一个数据空间. 拷贝的对象分两种类型: . 拷贝可变类型 浅拷贝: 只拷贝第一层数据,不关心里面的第 ...

  10. javascript浅拷贝深拷贝理解记录

    javascript的深拷贝和浅拷贝问题几乎是面试必问的问题.好记性不如烂笔头,特此来记录一下自己对深拷贝浅拷贝的理解. 顾名思义,拷贝就是copy复制,在js中可以浅而理解为对一个对象或者数组的复制 ...

随机推荐

  1. Ubuntu系统启用Apache Mod_rewrite模块

    在终端中执行 sudo a2enmod rewrite 指令后,即启用了 Mod_rewrite 模块. 另外,也可以通过将 /etc/apache2/mods-available/rewrite.l ...

  2. svn出现权限不足时的解决方法

    将所有svn目录设置为当前用户所有....即可 sudo chown will:will . -R

  3. HTML的定位属性

    position    用于定义一个元素是否absolute(绝对),relative(相对),static(静态),或者fixed(固定) top层距离顶点纵坐标的距离 left层距离顶点横坐标的距 ...

  4. 4、C#基础整理(if语句经典习题)

    1.用 if 判断输入的是否是空格键的方法:(Console.ReadKey()的用法) ConsoleKeyInfo readkey = Console.ReadKey(); Console.Wri ...

  5. HDU5772 (最小割)

    Problem String problem (HDU5772) 题目大意 给定一个由数字组成的字符串(n<=100),挑选出一些字符组成一个新的字符串. 字符串的价值: sigma w[id( ...

  6. linux远程连接mysql数据库

    在linux系统中,远程连接mysql数据库时不仅需要开启ip访问,还需要将防火墙中添加相应规则 在wdlinux中的[安全管理]菜单下选择[防火墙[iptables]]选项,增加端口为3306的规则 ...

  7. SQL基础,与数据类型;

    net start mssqlserver 开启数据库:  net stop mssqlserver 关闭数据库:  net pause mssqlserver 暂停数据库:  net continu ...

  8. js取配置文件内容

    使用 jQuery.i18n.properties 实现 Web 前端的国际化 http://www.ibm.com/developerworks/cn/web/1305_hezj_jqueryi18 ...

  9. 【题解】【矩阵】【回溯】【Leetcode】Rotate Image

    You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...

  10. Cocos2d-x游戏移植到Android平台

    1.所需环境支持:Android SDK.NDK.Eclipse.Cygwin.(本人所用系统WIN7-64位) (1)Cygwin的下载安装: Cygwin是Windows下的Linux模拟环境,用 ...