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

来源:互联网 发布:youtube dl mac 编辑:程序博客网 时间:2024/05/17 03:47
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