NSDateFormatter使用时的性能优化

2017-12-08  本文已影响0人  th先生

代码大量使用了NSDateFormatter,NSDateFormatter的创建比较消耗性能,如果需要多处使用,最好通过单例的方式来创建,防止多次创建消耗性能

#import "KDateFormatter.h"

static KDateFormatter *_instanceType = nil;

@implementation KDateFormatter

+ (instancetype)sharedDateFormatter{
    
   static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instanceType = [[KDateFormatter alloc]init];
    });
    return _instanceType;
}

@end

另外,利用strptime函数来进行转换的方法也可降低消耗。

- (NSDate *)dateFromISO8601StringDateFormatter:(NSString *)string{
    if (!string) {
        return nil;
    }

    struct tm tm;
    time_t t;

    strptime([string cStringUsingEncoding:NSUTF8StringEncoding], "%Y-%m-%d %H:%M:%S", &tm);
    tm.tm_isdst = -1;
    t = mktime(&tm);

    return [NSDate dateWithTimeIntervalSince1970:t + [[NSTimeZone localTimeZone] secondsFromGMT]];
}

- (NSString *)ISO8601String:(NSDate*)date {
    struct tm *timeinfo;
    char buffer[80];
//这里计算秒的时候,实际时间跟北京时间相差8小时,所以要加8*60*60秒
    time_t rawtime = [date timeIntervalSince1970] - [[NSTimeZone localTimeZone] secondsFromGMT] + 8*60*60;
    timeinfo = localtime(&rawtime);

    strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", timeinfo);

    return [NSString stringWithCString:buffer encoding:NSUTF8StringEncoding];
}
上一篇 下一篇

猜你喜欢

热点阅读