IOS NSCopying
来源:互联网 发布:淘宝物流模板怎么设置 编辑:程序博客网 时间:2024/05/28 03:04
首 先,从copy开始说,简而言之,copy的目的就是生成一个新的实例,然后把其成员都按原实例赋值。对于非指针型的成员,比如BOOL, int, float,这样的赋值可以直接进行。但是对于指针型的数据,比如Objc中用到的对象,就有Deep Copy和Shallow Copy的区别——这个和在C++中的基本上是一样的:是生成新的成员对象,或是指向同一成员对象。了 解了这点以后,再看看Copy在Objetive-C中的实现方式。如果要调用一个对象的copy方法,这个对象必须遵循NSCopying的协议。这个 协议中规定了一个方法:- (id)copyWithZone:(NSZone *)zone;我们就是通过实现这个方法给对象提供拷贝的功能。对于很多现有类,如NSString,NSDictionary,。。。这个方法已经实 现。假设我们现在自定义了一个类,需要为这个类提供拷贝的功能,就需要自己来动手写CopyWithZone的方法:示例如下:
@interface Product()<NSCopying>@property(nonatomic,weak)id<NSCopying>delegate;@end@implementation Product-(instancetype)initWithName:(NSString*)name Address:(NSString*)address{ if (self = [super init]) { self.name = name; self.Address = address; } return self;}-(id)copyWithZone:(NSZone *)zone{ Product *product = [[Product alloc]initWithName:self.name Address:self.Address]; [product setDelegate:[self delegate]]; return product;}
使用
Product *p1 = [[Product alloc]initWithName:@"BOB" Address:@"beijin"]; Product *p2 = [p1 copy]; NSLog(@"p1.add=%p,%@,p2.add=%p,%@",p1,p1.name,p2,p2.name);
打印出来的对象地址是不同的,但是内容是一样的
0 0
- IOS NSCopying
- 【ios】<NSCopying>协议
- NScopying
- <NSCopying>
- NSCopying
- NSCopying
- iOS学习笔记13—NSCopying
- iOS SDK详解之NSCopying协议
- iOS模型copy < NSCopying, NSMutableCopying >实现
- iOS中几个常用协议 NSCopying/NSMutableCopying
- ios开发——NSCopying与NSMutableCopying协议
- ios开发——NSCopying与NSMutableCopying协议
- NSCopying协议
- NSCopying,NSCoding
- NSCopying NSCoding
- NSCopying、NSCoding
- NSCopying/NSMutableCopying
- 谈谈IOS开发的NSCopying和NSMutableCopying协议的理解和基本使用
- JAVA从入门到精通(5)——数组
- pat 最大子列和问题
- 快速排序算法
- HTML嵌入到iOS页面的开发
- codeforces 776C Molly's Chemicals(前缀和 二分搜索)
- IOS NSCopying
- 【OPNET学习系列文章之1】进程模型解析
- Zstack协议栈OSAL中添加任务事件消息、发送数据详细过程
- 给事件处理函数添加 return false的作用是什么?
- 用户运营:如何引导和培养一种最好的用户习惯?
- 68-会话(创建会话)
- java日志系统
- CountDownTimer使用
- C#静态与非静态比较