超简易复制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       = @(27);
    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       = @(28);
    [model_two info];
}

@end

核心的地方:

目录
相关文章
|
5月前
|
设计模式
**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合
【6月更文挑战第23天】**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合。工厂模式专注于单个对象,通过具体工厂创建具体产品,适用于简单对象创建;抽象工厂则关注一系列相关产品,提供创建一族对象的接口,适用于处理多个不兼容产品族。选择模式基于问题域的复杂性,单个产品需求时用工厂模式,多产品族时用抽象工厂模式。
32 5
|
3月前
|
设计模式 存储 安全
18 Java反射reflect(类加载+获取类对象+通用操作+设计模式+枚举+注解)
18 Java反射reflect(类加载+获取类对象+通用操作+设计模式+枚举+注解)
92 0
|
5月前
|
设计模式 缓存 Java
Java设计模式:享元模式实现高效对象共享与内存优化(十一)
Java设计模式:享元模式实现高效对象共享与内存优化(十一)
|
6月前
|
设计模式 JavaScript 前端开发
[设计模式Java实现附plantuml源码~创建型] 复杂对象的组装与创建——建造者模式
[设计模式Java实现附plantuml源码~创建型] 复杂对象的组装与创建——建造者模式
|
6月前
|
设计模式 Java API
【设计模式】JAVA Design Patterns——Active Object(活动对象设计模式)
【设计模式】JAVA Design Patterns——Active Object(活动对象设计模式)
|
6月前
|
设计模式 存储 SQL
第四篇 行为型设计模式 - 灵活定义对象间交互
第四篇 行为型设计模式 - 灵活定义对象间交互
124 0
|
6月前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
|
6月前
|
设计模式 存储 Java
[设计模式Java实现附plantuml源码~结构型]实现对象的复用——享元模式
[设计模式Java实现附plantuml源码~结构型]实现对象的复用——享元模式
|
6月前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~结构型]对象的间接访问——代理模式
[设计模式Java实现附plantuml源码~结构型]对象的间接访问——代理模式
|
6月前
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~创建型] 对象的克隆~原型模式
[设计模式Java实现附plantuml源码~创建型] 对象的克隆~原型模式