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秒,对于一般的百条以内,属性值不是很多的话,应该差距不大,当然,还是以实际的使用情况分析,我在此只是简单的对比。有错误的地方,请指正。