超简易复制Model对象(为后续备忘录设计模式博文做铺垫)

复制整个Model需要实现NSCopy协议,可以想象是非常麻烦的一件事情,今天我跟大家分享一个不需要你做任何操作的复制Model对象的方法,不过,首先你得先去下载开源代码FastCoder辅助才行。

源码如下:

NSObject+ObjectCopy.h 与 NSObject+ObjectCopy.m

//
// NSObject+ObjectCopy.h
// FastCoder
//
// Created by YouXianMing on 15/1/3.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
// #import <Foundation/Foundation.h> @interface NSObject (ObjectCopy) /**
* 复制对象
*
* @return 返回复制的对象
*/
- (id)copyObject; @end
//
// NSObject+ObjectCopy.m
// FastCoder
//
// Created by YouXianMing on 15/1/3.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
// #import "NSObject+ObjectCopy.h"
#import "FastCoder.h" @implementation NSObject (ObjectCopy) - (id)copyObject {
id object = nil;
NSData *data = nil; if ((data = [FastCoder dataWithRootObject:self])) {
object = [FastCoder objectWithData:data];
} return object;
} @end

Model.h 与 Model.m

//
// Model.h
// FastCoder
//
// Created by YouXianMing on 15/1/3.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
// #import <Foundation/Foundation.h> @interface Model : NSObject @property (nonatomic, strong) NSString *name; // 姓名
@property (nonatomic, strong) NSNumber *age; // 年龄
@property (nonatomic, strong) NSDate *birthDate; // 出身日期 @property (nonatomic, strong) NSArray *subInfo; // 子信息
@property (nonatomic, strong) NSDictionary *address; // 地址 - (void)info; @end
//
// Model.m
// FastCoder
//
// Created by YouXianMing on 15/1/3.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
// #import "Model.h" @implementation Model - (void)info {
NSLog(@"[%@]", self);
NSLog(@"name %@", self.name);
NSLog(@"age %@", self.age);
NSLog(@"birthDate %@", self.birthDate);
NSLog(@"subInfo %@", self.subInfo);
NSLog(@"address %@", self.address);
NSLog(@"");
} @end

控制器源码:

//
// ViewController.m
// http://home.cnblogs.com/u/YouXianMing/
//
// Created by YouXianMing on 15/1/3.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
// #import "ViewController.h"
#import "NSObject+ObjectCopy.h"
#import "Model.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; // ModelOne
Model *model_one = [Model new];
model_one.name = @"YouXianMing";
model_one.age = @();
model_one.birthDate = [NSDate date];
model_one.subInfo = @[@"iOS", @"C++"];
model_one.address = @{@"BeiJing": @"TongZhou"};
[model_one info]; // ModelTwo
Model *model_two = [model_one copyObject];
model_two.name = @"QiuLiang";
model_two.age = @();
[model_two info];
} @end

核心的地方:

最新文章

  1. SQL Server 维护计划实现数据库备份(策略实战)
  2. java集合类
  3. 1350. Primary Arithmetic
  4. Java基础——事务
  5. [原创]gerrit上分支操作记录(创建分支、删除分支)
  6. Jquery CDN
  7. php--yii2.0的安装
  8. ADODB.Connection 错误 &#39;800a0e7a&#39;。。
  9. 图的深度优先遍历(DFS) c++ 非递归实现
  10. zoj p3780 Paint the Grid Again
  11. iOS判断字符串是否包含表情字符
  12. Project 5:替换指定字符串
  13. vscode c++ 编译生成后,调试时无法命中断点
  14. 常见的web攻击方式
  15. ZeroMQ总结
  16. 转 代码修改buildoption
  17. 深入理解计算机系统 (Randal E.Bryant / David O&#39;Hallaron 著)
  18. 四则运算之Right-BICEP单元测试
  19. asserts文件存到外部SD卡里
  20. 【Django】【四】测试

热门文章

  1. windows10下找回照片查看器的方法(仅作记录)
  2. Dock的生态开源技术(Etcd&amp;Machine&amp;Compose&amp;Swarm&amp;Mesos&amp;Kubernetes)
  3. HTML自己整理
  4. JVM内存限制和调整
  5. Xamarin学习
  6. api.execScript
  7. C#在.NET编译执行过程
  8. asp.net MVC中form提交和控制器接受form提交过来的数据
  9. HTML5 FormData实现文件上传实例
  10. js-权威指南学习笔记15.3