iOS下的原型模式与非原型模式的效率比较

iOS下的原型模式与非原型模式的效率比较
直接上代码:
// 数据模型
#import <Foundation/Foundation.h>

@interface DataModel : NSObject <NSMutableCopying>

@property (nonatomic,strong) NSString *name;
@property (nonatomic,strong) NSDate *date;
@property (nonatomic,assign) BOOL sex;
@property (nonatomic,assign) NSInteger age;

@end

#import "DataModel.h"

@implementation DataModel

- (id)mutableCopyWithZone:(NSZone *)zone {
    
    DataModel *model = [[[self class]allocWithZone:zone]init];
    model.name = [_name copy];
    model.date = [_date copy];
    model.age = _age;
    model.sex = _sex;
    return model;
}
@end

// 调用的地方
<pre name="code" class="objc">#import <Foundation/Foundation.h>
#import "DataModel.h"

@interface Prototype : NSObject

// 原型模式测试例子
+ (void)prototypeTest:(id)object;
@end
 


#import "Prototype.h"

@implementation Prototype
// 原型模式测试例子
+ (void)prototypeTest:(id)object  {

    // 数据模型
    DataModel *model = [[DataModel alloc]init];
    
    // 填充模型数据
    model.name = @"Jony";
    model.age = 23;
    model.date = [NSDate date];
    
    // 开启对比情况选择标志
    int flag = 1; // 1 表示原型模式 非表示非原型模式
    if(flag){
        // 循环体中使用原型模式,实现深拷贝
        for (int i = 0; i< 10001; i++) {
            if(i==0)
                NSLog(@"%@",[NSDate date]);
            DataModel *mod = [model mutableCopy];
            mod.name = @"Frandkly";
            mod.date = [NSDate dateWithTimeIntervalSince1970:235325325];
            mod.sex = 0;
            mod.age = 78;
            NSLog(@"%@,",mod.name);
            if (i == 10000) {
                NSLog(@"原型模式");
                NSLog(@"%@",[NSDate date]);
            }
        }
    }
    else {
        for (int i = 0; i<10001; i++) {
            if(i==0)
                NSLog(@"%@",[NSDate date]);
            DataModel *mod = [[DataModel alloc]init]  ;
            mod.name = @"Frandkly";
            mod.date = [NSDate dateWithTimeIntervalSince1970:235325325];
            mod.sex = 0;
            mod.age = 78;
            NSLog(@"%@,",mod.name);
            if (i == 10000) {
                NSLog(@"一般alloc");
                NSLog(@"%@",[NSDate date]);
                
            }
        }
    }
}

@end

测试结果:

原型模式下:

 02:55:14.326 DesignPatter_Prototype[1761:46308] Frandkly,

 02:55:25.321 DesignPatter_Prototype[1761:46308] Frandkly,


非原型模式下:

 02:56:59.804 DesignPatter_Prototype[1800:47397] Frandkly,

 02:57:13.753 DesignPatter_Prototype[1800:47397] Frandkly,


结果分析:

效率差距不是很大,在一万条数据的情况下差距是2到3秒,对于一般的百条以内,属性值不是很多的话,应该差距不大,当然,还是以实际的使用情况分析,我在此只是简单的对比。有错误的地方,请指正。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值