浅拷贝,深拷贝---ios
#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的更多相关文章
- JS中有关对象的继承以及实例化、浅拷贝深拷贝的奥秘
一.属性的归属问题 JS对象中定义的属性和方法如果不是挂在原型链上的方法和属性(直接通过如类似x的方式进行定义)都只是在该对象上,对原型链上的没有影响.对于所有实例共用的方法可直接定义在原型链上这样实 ...
- $.extend()浅拷贝深拷贝
参考网址:http://bijian1013.iteye.com/blog/2255037 jQuery.extend() 函数用于将一个或多个对象的内容合并到目标对象. 注意:1. 如果只为$.ex ...
- Python__学习路上的坑之--引用,浅拷贝,深拷贝
copy : 相当于只是拷贝表面一层,如果里面还有深层次的引用,那么也是直接拷贝引用的地址,而且如果拷贝对象是不可变类型比如元组,那么也是直接拷贝引用. deepcopy: 无论是拷贝可变类型还是不可 ...
- Python中的浅拷贝 深拷贝
浅拷贝只拷贝父对象,子对象的地址空间不改变,包括下面三种: 1. copy 从下面的例子可以看出对象c从a拷贝,当对象a增加一个列表元素之后,c对象没有改变, 而当对象a中的子列表改变时,对象c的子列 ...
- 浅拷贝 &&&深拷贝 实现
1.浅拷贝 //1.直接赋值给一个变量 //浅拷贝 //2.Object.assign() //浅拷贝 let obj4={} let obj5={money:50000} obj4.__proto_ ...
- javascript浅拷贝深拷贝详解
一.浅拷贝 浅拷贝在现实中最常见的表现在赋值上面,例如 <!DOCTYPE html> <html lang="en"> <head> < ...
- js库 - 浅拷贝 & 深拷贝
学了堆栈内存空间,应该就理解了什么叫简单数据类型存在栈内存,复杂数据类型存在堆内存了. 然后面试中经常会问.业务中也经常会遇到的问题就是深浅拷贝的问题了. 栈内存中简单数据类型直接拷贝就能得到一个副本 ...
- PythonStudy1——Python 值拷贝 浅拷贝 深拷贝
拷贝:对值进行复制的过程 # 值拷贝:应用场景最多 ls = [1, 'abc', [10]] ls1 = ls # ls1直接将ls中存放的地址拿过来 # ls内部的值发生任何变化,ls1都会随 ...
- python中赋值-浅拷贝-深拷贝之间的关系
赋值: 变量的引用,没有拷贝空间 对象之间赋值本质上 是对象之间的引用传递而已.也就是多个对象指向同一个数据空间. 拷贝的对象分两种类型: . 拷贝可变类型 浅拷贝: 只拷贝第一层数据,不关心里面的第 ...
- javascript浅拷贝深拷贝理解记录
javascript的深拷贝和浅拷贝问题几乎是面试必问的问题.好记性不如烂笔头,特此来记录一下自己对深拷贝浅拷贝的理解. 顾名思义,拷贝就是copy复制,在js中可以浅而理解为对一个对象或者数组的复制 ...
随机推荐
- Ubuntu系统启用Apache Mod_rewrite模块
在终端中执行 sudo a2enmod rewrite 指令后,即启用了 Mod_rewrite 模块. 另外,也可以通过将 /etc/apache2/mods-available/rewrite.l ...
- svn出现权限不足时的解决方法
将所有svn目录设置为当前用户所有....即可 sudo chown will:will . -R
- HTML的定位属性
position 用于定义一个元素是否absolute(绝对),relative(相对),static(静态),或者fixed(固定) top层距离顶点纵坐标的距离 left层距离顶点横坐标的距 ...
- 4、C#基础整理(if语句经典习题)
1.用 if 判断输入的是否是空格键的方法:(Console.ReadKey()的用法) ConsoleKeyInfo readkey = Console.ReadKey(); Console.Wri ...
- HDU5772 (最小割)
Problem String problem (HDU5772) 题目大意 给定一个由数字组成的字符串(n<=100),挑选出一些字符组成一个新的字符串. 字符串的价值: sigma w[id( ...
- linux远程连接mysql数据库
在linux系统中,远程连接mysql数据库时不仅需要开启ip访问,还需要将防火墙中添加相应规则 在wdlinux中的[安全管理]菜单下选择[防火墙[iptables]]选项,增加端口为3306的规则 ...
- SQL基础,与数据类型;
net start mssqlserver 开启数据库: net stop mssqlserver 关闭数据库: net pause mssqlserver 暂停数据库: net continu ...
- js取配置文件内容
使用 jQuery.i18n.properties 实现 Web 前端的国际化 http://www.ibm.com/developerworks/cn/web/1305_hezj_jqueryi18 ...
- 【题解】【矩阵】【回溯】【Leetcode】Rotate Image
You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...
- Cocos2d-x游戏移植到Android平台
1.所需环境支持:Android SDK.NDK.Eclipse.Cygwin.(本人所用系统WIN7-64位) (1)Cygwin的下载安装: Cygwin是Windows下的Linux模拟环境,用 ...