文档章节

NSCopying

小春0618
 小春0618
发布于 2014/12/26 16:30
字数 293
阅读 21
收藏 0

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

下一篇: NSCoding使用
小春0618
粉丝 8
博文 40
码字总数 10552
作品 0
海淀
程序员
私信 提问
iOS OC NSCopying 协议

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

卧龙小
2015/07/11
319
0
NSDictionary实现原理

NSDictionary是基于key - value 方式,把key映射到一个hash表中实现的 key 需要支持NSCopying协议,实际上不支持也可以作为key,但在swift中就必须要支持,支持NSCopying的原因在于,NSDicit...

庄msia
2018/08/16
0
0
Method 'copyWithZone:' in protocol not implemented

警告如下 解决办法:仔细查查是不是继承错了协议,以为:NSCopying和NSCoding实在是太像了,(我们要继承的是NSCoding不是NSCopying)不仔细根本查不出来

不孤独的美食家
2015/10/20
456
2
拷贝

一、拷贝: 任何实现拷贝功能都需要实现NSCopying协议。 1、深拷贝: 开辟一个新空间,对对象本身进行拷贝以外,还会对对象里包含的子元素逐个进行拷贝,指向的内存新的内存空间。 2、浅拷贝...

Cy_Star
2017/10/18
0
0
MutableCopy & copy

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

AmoyAI
2012/12/11
533
0

没有更多内容

加载失败,请刷新页面

加载更多

设计模式之访问者模式

定义 Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which......

陈年之后是青葱
昨天
9
0
PhotoShop 高级应用 : 分层云彩 - 简单闪电效果

1.创建黑白渐水平渐变图层 2.选择滤镜选项卡: 渲染--->分层云彩功能 3.将滤镜-云彩效果渲染后的图层进行反相操作 【此时出现闪电效果】 6.调整色阶,使得闪电效果更明显 7.创建剪贴蒙版:色...

东方墨天
昨天
9
0
三种实现Android主界面Tab的方式

三种实现Android主界面Tab的方式 https://www.cnblogs.com/caobotao/p/5103673.html

shzwork
昨天
9
0
java8-Optional类

背景 NPE问题,100%的Java程序员都碰到,并且曾经是心中的痛。 1965年英国TonyHoare引入了Null引用,后续的设计语言包括Java都保持了这种设计。 一个例子 业务模型 Person 有车一族, 有Car...

春天springcarter
昨天
11
0
py 登录github时token以及cookie的应用

import requestsfrom bs4 import BeautifulSoup## 获取tokenr1 = requests.get('https://github.com/login')s1 = BeautifulSoup(r1.text,'html.parser')token = s1.find(name='input',......

子枫Eric
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部