超简易复制Model对象(为后续备忘录设计模式博文做铺垫)
超简易复制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对象(为后续备忘录设计模式博文做铺垫)的更多相关文章
- js:对象的创建(为prototype做铺垫)
/** *在js中并不存在类,所以能够直接通过Object来创建对象,可是使用这样的方式创建有一 *弊端:因为没有类的约束,无法实现对象的反复利用,而且没有一种规范约定,在操作时easy带来问题. ...
- 【Java EE 学习 69 上】【struts2】【paramsPrepareParamsStack拦截器栈解决model对象和属性赋值冲突问题】
昨天有同学问我问题,他告诉我他的Action中的一个属性明明提供了get/set方法,但是在方法中却获取不到表单中传递过来的值.代码如下(简化后的代码) public class UserAction ...
- 超简易静态Web服务器
使用 HttpListener 写的一个超简易静态Web服务器 开发环境:VS2010 + .NET2.0 http://files.cnblogs.com/zjfree/EasyIIS.rar
- model对象之setter方法使用,解决去除空格和将数字转成字符串展示方法
1.系统中手机号注册的时候,不能含有前后空格.在model对象中过滤~! private String mobile; public String getMobile() { return mobil ...
- django的model对象转化成dict
今天发现一个掉渣天的方法,Django的forms包里面有一个方法:model_to_dict(),它可以将一个model对象转化成dict. In [1]: from apps.dormitory. ...
- Json转model对象,model转json,解析json字符串
GitHub链接: https://github.com/mozhenhau/D3Json D3Json 通过swift的反射特性,把json数据转换为model对象,本类最主要是解决了其他一般jso ...
- 浅谈C++中对象的复制与对象之间的相互赋值
C++对象的复制 有时需要用到多个完全相同的对象,例如,同一型号的每一个产品从外表到内部属性都是一样的,如果要对每一个产品分别进行处理,就需要建立多个同样的对象,并要进行相同的初始化,用以前的办法定义 ...
- ASP.NET的MVC中Model对象字段的数…
ASP.NET的MVC中Model对象字段的常用数据说明属性: Required——该字段不允许为空. MaxLength——设置数组或字符串最大长度. StringLength——设置字符串最小和最 ...
- 将Model对象转换成json文本或者json二进制文件
将Model对象转换成json文本或者json二进制文件 https://github.com/casatwy/AnyJson 注意:经过测试,不能够直接处理字典或者数组 主要源码的注释 AJTran ...
随机推荐
- vue 分享知识点
vue 分享模块清单 1.Vue 2.0之Vue实例和生命周期 2.vue 2.0之自定义指令 3.vue 2.0之观察者模式实现简单异步无限滚动 4.从JavaScript属性描述器剖析Vue.js ...
- vue view 表单验证正常逻辑
<template> <Form ref="formInline" :model="formInline" :rules="rule ...
- C++中内联函数
目录 什么是内联函数 如何使函数内联 为什么要使用内联函数 inline函数的优缺点分析 什么时候该使用内联函数 正文 在C语言中,我们使用宏定义函数这种借助编译器的优化技术来减少程序的执行时间,那么 ...
- java面试④数据库部分
2.3.1 数据库的分类及常用的数据库 数据库分为:关系型数据库和非关系型数据库 关系数据库:mysql,oracle,sqlServer 非关系型:redis,mongoDB 2.3.2 简单介绍一 ...
- redis集群与分片(2)-Redis Cluster集群的搭建与实践
Redis Cluster集群 一.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Re ...
- jQuery 1.9/2.0/2.1及其以上 on 无效的解决办法
jQuery 1.9/2.0/2.1及其以上版本无法使用live函数了,然而jQuery 1.9及其以上版本提供了on函数来代替.本文讲解了jQuery on函数的使用方法,以及在使用jQuery函数 ...
- vs2013中,自定义mvc 添加视图脚手架
参考文章: http://weblogs.asp.net/imranbaloch/archive/2013/09/15/customizing-the-asp-net-mvc-5-web-api-2- ...
- FineUI表格、窗体、按钮组及事件
//表格 @(F.Grid().IsFluid(true).CssClass("blockpanel").Title("表格").ShowHeader(true ...
- ubuntu上安装redis
1.Redis简要介绍 访问Redis官方网站 https://redis.io/ 上面介绍到 ,redis是开源,BSD许可,高级的key-value存储系统,可以用来存储字符串,哈希结构,链表,集 ...
- SQL查询几种的区别。
最近看了几篇SQL查询的文章做一下总结哦,大概简记如下: SQL查询的实质是,是指从数据库中取得数据的子集,可以先取列子集,然后再取符合条件的行子集. 1.单表查询: SELECT [Name] ,[ ...