我是靠谱客的博主 乐观蜜蜂,最近开发中收集的这篇文章主要介绍NSDateFormatter优化以及测试方法CFAbsoluteTimeGetCurrent(),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
过度的创建
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 = [[
NSDateFormatter
alloc
]
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"
static
FormatterManger
*instanceType =
nil
;
@implementation
FormatterManger
+(
instancetype
)formatterManger{
static
dispatch_once_t
onceToken;
dispatch_once
(&onceToken, ^{
instanceType
= [[
FormatterManger
alloc
]
init
];
});
return
instanceType
;
}
@end
//
单例的方式的调试
- (
void
)GCDOnce {
CFAbsoluteTime
startTime =
CFAbsoluteTimeGetCurrent
();
for
(
int
i =
0
; i <
100000
; i ++) {
FormatterManger
*formatter = [
FormatterManger
formatterManger
];
}
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"
static
NSDateFormatter
*instanceType =
nil
;
@implementation
NSDateFormatter (CategoryFormatter)
+ (
instancetype
)shareDateFormatter{
static
dispatch_once_t
onceToken;
dispatch_once
(&onceToken, ^{
instanceType
= [[
NSDateFormatter
alloc
]
init
];
});
return
instanceType
;
}
@end
//
分类方法调试
- (
void
)category {
CFAbsoluteTime
startTime =
CFAbsoluteTimeGetCurrent
();
for
(
int
i =
0
; i <
100000
; i ++) {
NSDateFormatter
*dateformatter = [
NSDateFormatter
shareDateFormatter
];
}
CFAbsoluteTime
stopTime =
CFAbsoluteTimeGetCurrent
();
NSLog
(
@"%s :%f"
,
__func__
,stopTime - startTime);
}
三种方法输出结果:
第一种用的时间最长,第二种用的时间最短,第三种用的时间和第二种差不多,不过我一般使用第二种
最后
以上就是乐观蜜蜂为你收集整理的NSDateFormatter优化以及测试方法CFAbsoluteTimeGetCurrent()的全部内容,希望文章能够帮你解决NSDateFormatter优化以及测试方法CFAbsoluteTimeGetCurrent()所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复