超简易复制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

核心的地方:

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

  1. js:对象的创建(为prototype做铺垫)

    /**  *在js中并不存在类,所以能够直接通过Object来创建对象,可是使用这样的方式创建有一  *弊端:因为没有类的约束,无法实现对象的反复利用,而且没有一种规范约定,在操作时easy带来问题. ...

  2. 【Java EE 学习 69 上】【struts2】【paramsPrepareParamsStack拦截器栈解决model对象和属性赋值冲突问题】

    昨天有同学问我问题,他告诉我他的Action中的一个属性明明提供了get/set方法,但是在方法中却获取不到表单中传递过来的值.代码如下(简化后的代码) public class UserAction ...

  3. 超简易静态Web服务器

    使用 HttpListener 写的一个超简易静态Web服务器 开发环境:VS2010 + .NET2.0 http://files.cnblogs.com/zjfree/EasyIIS.rar

  4. model对象之setter方法使用,解决去除空格和将数字转成字符串展示方法

    1.系统中手机号注册的时候,不能含有前后空格.在model对象中过滤~! private String mobile; public String getMobile() { return mobil ...

  5. django的model对象转化成dict

    今天发现一个掉渣天的方法,Django的forms包里面有一个方法:model_to_dict(),它可以将一个model对象转化成dict. In [1]: from apps.dormitory. ...

  6. Json转model对象,model转json,解析json字符串

    GitHub链接: https://github.com/mozhenhau/D3Json D3Json 通过swift的反射特性,把json数据转换为model对象,本类最主要是解决了其他一般jso ...

  7. 浅谈C++中对象的复制与对象之间的相互赋值

    C++对象的复制 有时需要用到多个完全相同的对象,例如,同一型号的每一个产品从外表到内部属性都是一样的,如果要对每一个产品分别进行处理,就需要建立多个同样的对象,并要进行相同的初始化,用以前的办法定义 ...

  8. ASP.NET的MVC中Model对象字段的数…

    ASP.NET的MVC中Model对象字段的常用数据说明属性: Required——该字段不允许为空. MaxLength——设置数组或字符串最大长度. StringLength——设置字符串最小和最 ...

  9. 将Model对象转换成json文本或者json二进制文件

    将Model对象转换成json文本或者json二进制文件 https://github.com/casatwy/AnyJson 注意:经过测试,不能够直接处理字典或者数组 主要源码的注释 AJTran ...

随机推荐

  1. 剑指offer62:二插搜索树的第k个节点

    题目描述: 给定一颗二叉搜索树,请找出其中的第k大的结点.例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. 中序遍历 /* struct TreeNo ...

  2. elasticsearch(一):安装与配置

    一.elastic search的安装与配置 1.安装Java 并且配置JAVA_HOME环境变量. 2.下载elasticsearch,下载地址:https://www.elastic.co/dow ...

  3. [Linux]——进程管理相关

    一些概念 程序program:通常以二进制程序放置在存储媒介中,以物理文件形式存在 进程process:程序通过用户执行被触发后,执行者的权限与属性.程序的代码和所需数据会被加载到内存中,OS给予这个 ...

  4. C# 接口用法

    一.接口定义 接口是指一组函数成员而不实现它们的引用类型,只能由类和结构来是实现,接口的作用就不阐述了 二.声明接口 interface IMyInterface //interface 是关键字,后 ...

  5. c#基础学习(0630)之面向对象总习

    面向对象总习 1.封装.继承.多态 ****字段:存储数据,访问修饰符应该设置为private私有的 ****属性:保护字段,对字段的取值和赋值的限定 ****new关键字: 1.在堆中开辟空间(引用 ...

  6. SQL、Linq和Lambda表达式 的关系

    首先说说这三者完全是三种不同的东西,SQL是结构化查询语言(Structured Query Language)简称,这大家再熟悉不过了,下面主要介绍LINQ和Lambda表达式的基本概念以及同一查询 ...

  7. wpf中应该使用c#四种定时器中的DispatcherTimer

    c#中有四种定时器 1:System.Threading.Timer 使用: private System.Threading.Timer timerClose; timerClose = new S ...

  8. sql2000-text类型数据只能看到256个字节

    工具只能看到256个字节,其实数据是完整的,可以自己写个程序取数据试一试

  9. Ajax 学习(一)

    此篇为学习笔记 概述 Ajax(Asynchronous Javascrpt And Xml)是一种运用于浏览器的技术,它可以在浏览器与服务器之间使用异步通信机制进行数据通信,从而允许浏览器向服务器获 ...

  10. videojs IE8无法播放解决方案

    1.如果是在.cs文件里初始化视频元素,没有遇到无法播放问题. 2.如果是js动态换播放器的poster和src遇到此问题,解决办法是用videojs提供的函数来设置 https://github.c ...