我是靠谱客的博主 乐观蜜蜂,最近开发中收集的这篇文章主要介绍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()所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部