NSDateFormatter优化以及测试方法CFAbsoluteTimeGetCurrent()
来源:互联网 发布:淘宝查号131458网址 编辑:程序博客网 时间:2024/06/01 21:27
过度的创建NSDateFormatter用于NSDate与NSString之间转换,会导致App卡顿,打开Profile工具查一下性能,你会发现这种操作占CPU比例是非常高的。所以我们需要优化一下。
在iOS 7之前NSDateFormatter线程是不安全的,在iOS 7之后NSDateFormatter线程是安全的,但是现在iOS 7被舍弃了,所以我们只考虑线程是安全的就可以了。
三种方式对比以及测试方法:
第一种:普通创建
// 普通创建方式
- (void)Normal {
CFAbsoluteTime startTime =CFAbsoluteTimeGetCurrent();
for (int i = 0; i <100000; i ++) {
NSDateFormatter *dataFormatter = [[NSDateFormatteralloc]init];
}
CFAbsoluteTime stopTime =CFAbsoluteTimeGetCurrent();
NSLog(@"%s :%f",__func__,stopTime - startTime);
}
第二种:单例方法
FormatterManger.h文件
#import <Foundation/Foundation.h>
@interface FormatterManger :NSDateFormatter
+(instancetype)formatterManger;
@end
FormatterManger.m文件
#import "FormatterManger.h"
staticFormatterManger *instanceType =nil;
@implementation FormatterManger
+(instancetype)formatterManger{
staticdispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instanceType = [[FormatterMangeralloc]init];
});
returninstanceType;
}
@end
// 单例的方式的调试
- (void)GCDOnce {
CFAbsoluteTime startTime =CFAbsoluteTimeGetCurrent();
for (int i = 0; i <100000; i ++) {
FormatterManger *formatter = [FormatterMangerformatterManger];
}
CFAbsoluteTime stopTime =CFAbsoluteTimeGetCurrent();
NSLog(@"%s :%f",__func__,stopTime - startTime);
}
第三种:分类方法
分类.h
#import <Foundation/Foundation.h>
@interface NSDateFormatter (CategoryFormatter)
+ (instancetype)shareDateFormatter;
@end
分类.m
#import "NSDateFormatter+CategoryFormatter.h"
staticNSDateFormatter *instanceType =nil;
@implementation NSDateFormatter (CategoryFormatter)
+ (instancetype)shareDateFormatter{
staticdispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instanceType = [[NSDateFormatteralloc]init];
});
returninstanceType;
}
@end
// 分类方法调试
- (void)category {
CFAbsoluteTime startTime =CFAbsoluteTimeGetCurrent();
for (int i = 0; i <100000; i ++) {
NSDateFormatter *dateformatter = [NSDateFormattershareDateFormatter];
}
CFAbsoluteTime stopTime =CFAbsoluteTimeGetCurrent();
NSLog(@"%s :%f",__func__,stopTime - startTime);
}
三种方法输出结果:
第一种用的时间最长,第二种用的时间最短,第三种用的时间和第二种差不多,不过我一般使用第二种
阅读全文
1 0
- NSDateFormatter优化以及测试方法CFAbsoluteTimeGetCurrent()
- NSDateFormatter 优化
- CFAbsoluteTimeGetCurrent
- 性能优化之NSDateFormatter
- NSDateFormatter之性能优化
- IOS日期NSDateFormatter方法
- IOS-66-NSDateFormatter性能优化
- NSDateFormatter
- NSDateFormatter
- NSDateFormatter
- NSDateFormatter
- NSDateFormatter
- NSDateFormatter
- NSDateFormatter
- NSDateFormatter和NSNumberFormatter以及格式化限制
- apache2配置优化以及性能测试小结
- apache2配置优化以及性能测试小结
- apache2配置优化以及性能测试小结
- Dragonboard410c Android USB Camera 使用:mjpg-streamer介绍(一)
- HRBUST1849商品中心(贪心+思维+并查集)
- 百度地图隐藏百度标志
- 在eclipse中设置python文件的默认编码
- EFI 各模块之间数据交换 即variable service
- NSDateFormatter优化以及测试方法CFAbsoluteTimeGetCurrent()
- 字符串
- webview最全认识
- unordered_map和map
- SDL窗体嵌入到MFC/QT窗口控件上的方法总结
- 利用推广的方法证明NP-完全性
- 求一个数的二进制中1的个数(补码形式下)
- HDU 1728
- [Android6.0] RILC 系统结构及 LibRIL 运行机制