文档章节

Objective-C深复制和<NSCopying>协议

雾灵峰
 雾灵峰
发布于 2014/02/04 18:06
字数 335
阅读 709
收藏 2

1.简单复制只能实现浅拷贝:指针赋值,使两个指针指向相同的一块内存空间,操作不安全。

2. Foundation类已经遵守了<NSCopying>和 <NSMutableCopying>协议,即实现了copy和mutableCopy方法,因此Foundation对象可以使用这些方法创建对象的副本或可变副本

@protocol  NSCopying
- (id)copyWithZone:(NSZone *)zone;
@end
@protocol  NSMutableCopying
- (id)mutableCopyWithZone:(NSZone *)zone;
@end

3.用户自定义类遵守<NSCopying>协议和<NSMutableCopying>协议,则必须实现copyWithZone方法和mutableCopyWithZone方法,否则该类对象无法响应copy和mutableCopy消息 

4.实现copyWithZone方法,例:

-(id)copyWithZone:(NSZone *)zone
{
         Student *stu = [[Student allocWithZone:zone]initWithName:self.name Age:self.age];
         return stu;
}


对应main函数中:假设已经有一个Student对象stu1;

则:Student stu2 = [stu1 copy];

实现stu2是stu1的副本,这里是深复制,stu1和stu2分别对应不同内存。

 

5. 如果你的类产生了子类,那么copyWithZone:方法也将

被继承

Student *stu = [[Student allocWithZone: zone] init];

 该方法应该改为: Student *stu = [[[self class] allocWithZone: zone]init];

 如果编写一个类的copyWithZone:方法那么子类的方法应该先调用父类的copy方法以复制继承来的copy实例变量.


本文转载自:http://blog.csdn.net/tskyfree/article/details/7999620

雾灵峰
粉丝 12
博文 30
码字总数 2509
作品 0
成都
程序员
私信 提问
Objective-C浅拷贝和深拷贝

浅拷贝 浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间。如: char str = (char)malloc(100); char* str2 = str; 浅拷贝只是对对象的简单拷贝,让几个对象共用一片内...

大喵哥
2014/09/20
54
0
MutableCopy & copy

分别遵守<NSCopying>和 <NSMutableCopying>协议,http://blog.csdn.net/tskyfree/article/details/7999620 首先了解深复制,浅复制: 浅复制和深复制是对于包含对象成员的对象而言的。 浅复制:...

AmoyAI
2012/12/11
533
0
深复制:父类已经加入了NSCopying协议,它的子类该怎么重载copyWithZone?

大家好,我是刚学objective-c的,在书里看到这样的一句话: 如果编写一个类的 copyWithZone: 方法,而该烊的超类也实现了协议,那么应该先调用超类的 copy 方法以复制继承来的实例变量,然后...

侠隐
2016/05/30
333
0
iOS OC NSCopying 协议

一 NSCopying 协议 想让自己的类支持拷贝操作(copy),就需要实现NSCopying协议,该协议中有个方法: zone是之前开发程序程序时,会把内存分成不同的 zone ,而对象会创建在zone 中。现在不用...

卧龙小
2015/07/11
312
0
教程1:Objective-C

Objective-C的教程已经看过了。 内容大概有:[Objective-C基础语法(if/else/switch/for...),关键字,运算符],[面向对象(封装/继承/多态)],[Foundation框架常用类],[内存管理],[协...

殷美洪
2013/03/11
268
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot 403 问题

添加WebAppConfigurer 配置 @Configuration@EnableAutoConfigurationpublic class WebAppConfigurer extends WebMvcConfigurerAdapter { public WebAppConfigurer() { } ......

布袋和尚_爱吃鱼
14分钟前
3
0
Python自动更换壁纸爬虫与tkinter结合

直接上代码 import ctypesimport timeimport requestsimport osfrom threading import Threadfrom tkinter import Tk, Label, Button,Entry,StringVar,messagebox# '放到AppData\Roami......

物种起源-达尔文
15分钟前
2
0
Postgresql Study 笔记

Postgresql 安装 Windows, MAC Install Postgresql 下载地址: https://www.enterprisedb.com/downloads/postgres-postgresql-downloads Linux Install sudo apt-get update sudo apt-get in......

slagga
17分钟前
3
0
layer.open 打开新页面传参问题

如图所示,点击出售,把A页面的数据传到弹框上面,因为弹框比较复杂,所以使用引入一个新页面。 A.html a.js B.html b.js 1、第一种方案 sellInte: function (){ var obj = document.g...

木九天
20分钟前
3
0
沙龙报名 | 区块链数据服务技术应用实践

京东云是国内首家提供区块链数据在线分析服务产品的公司,也是行业内首家对区块链数据服务进行开源的公司。 本次沙龙是京东云BDS开源后,首次在深圳举办线下沙龙,我们将邀请京东云BDS团队核...

京东云技术新知
20分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部