NSDateFormatter 性能測試

NSDateFormatter 性能不完全測試

前幾日KZ同學(xué)提醒话速,說看到有處我加的代碼略微耗時(ps:kpi查的真嚴(yán))癞尚,看了看就是這貨

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd-MM-yyyy"];
    NSString *current = [dateFormatter stringFromDate:[NSDate date]];

其實就是NSDateFormatter初始化非常耗時氏身,代碼里也早已有寫好的單例(ios7之后是線程安全床估,不需要每個線程都創(chuàng)建單例)供調(diào)用雇寇。
關(guān)于NSDateFormatter創(chuàng)建耗時的資料也是一搜一大把赵颅。

閑來無事便測試了一下虽另,究竟有多耗時。

{
        begin = CACurrentMediaTime();
        for (int i = 0; i < count; i++) {
            formatter  = [[NSDateFormatter alloc] init];
            [formatter setDateFormat:@"yyyy-MM-dd"];
            string = [formatter stringFromDate:[NSDate date]];
        }
        end = CACurrentMediaTime();
        printf("NSDateFormatter:               %8.2f ms\n", (end - begin) * 1000);
    }
    {
        begin = CACurrentMediaTime();
        formatter  = [[NSDateFormatter alloc] init];
        for (int i = 0; i < count; i++) {
            [formatter setDateFormat:@"yyyy-MM-dd"];
            string = [formatter stringFromDate:[NSDate date]];
        }
        end = CACurrentMediaTime();
        printf("NSDateFormatter once:         %8.2f ms\n", (end - begin) * 1000);
    }

----測試1000次花費時間對比(8p/iOS12)-------
NSDateFormatter:                  86.05 ms
NSDateFormatter once:             4.01 ms

NSDateFormatter:                  84.80 ms
NSDateFormatter once:             4.36 ms

NSDateFormatter:                  80.20 ms
NSDateFormatter once:             3.89 ms

所以創(chuàng)建單例很有必要
上面可以看出兩者之間消耗時間差距極大饺谬,而且還聽過有人說應(yīng)該 針對format格式創(chuàng)建對應(yīng)的單例對象 捂刺,那是NSDateFormatter初始化消耗太高嗎?募寨?

for (int i = 0; i < count; i++) {
            begin = CACurrentMediaTime();
            formatter  = [[NSDateFormatter alloc] init];
            end = CACurrentMediaTime();
            a += (end-begin);
            
            begin = CACurrentMediaTime();
            [formatter setDateFormat:@"yyyy-MM-dd"];
            end = CACurrentMediaTime();
            b += (end-begin);
            
            begin = CACurrentMediaTime();
            string = [formatter stringFromDate:[NSDate date]];
            end = CACurrentMediaTime();
            c += (end-begin);
        }
        
        printf("NSDateFormatter:alloc               %8.2f ms\n", a * 1000);
        printf("NSDateFormatter:setFormat           %8.2f ms\n", b * 1000);
        printf("NSDateFormatter:stringFromDate      %8.2f ms\n", c * 1000);
----各個方法分開測試1000次花費時間對比(8p/iOS12)-------
NSDateFormatter:alloc                   9.44 ms
NSDateFormatter:setFormat               0.53 ms
NSDateFormatter:stringFromDate         65.40 ms

NSDateFormatter:alloc                  10.55 ms
NSDateFormatter:setFormat               0.58 ms
NSDateFormatter:stringFromDate         73.52 ms

NSDateFormatter:alloc                  10.11 ms
NSDateFormatter:setFormat               0.56 ms
NSDateFormatter:stringFromDate         70.50 ms

從上面可以看出族展,實際最耗時的方法為初次調(diào)用stringFromDate/dateFromString。

/*
生成不同format格式的對象對比
*/
{
        begin = CACurrentMediaTime();
        NSDateFormatter * formatter1  = [[NSDateFormatter alloc] init];
        NSDateFormatter * formatter2  = [[NSDateFormatter alloc] init];
        NSDateFormatter * formatter3  = [[NSDateFormatter alloc] init];
        NSDateFormatter * formatter4  = [[NSDateFormatter alloc] init];
        for (int i = 0; i < count/4; i++) {
            [formatter1 setDateFormat:@"yyyy-MM-dd"];
            string = [formatter1 stringFromDate:[NSDate date]];
            [formatter2 setDateFormat:@"MM-dd-yyyy"];
            string = [formatter2 stringFromDate:[NSDate date]];
            [formatter3 setDateFormat:@"MM-dd"];
            string = [formatter3 stringFromDate:[NSDate date]];
            [formatter4 setDateFormat:@"MM-yyyy"];
            string = [formatter4 stringFromDate:[NSDate date]];
        }
        end = CACurrentMediaTime();
        printf("NSDateFormatter:different format  %8.2f ms\n", (end - begin) * 1000);
    }
    {
        begin = CACurrentMediaTime();
        formatter  = [[NSDateFormatter alloc] init];
        for (int i = 0; i < count/4; i++) {
            [formatter setDateFormat:@"yyyy-MM-dd"];
            string = [formatter stringFromDate:[NSDate date]];
            [formatter setDateFormat:@"MM-dd-yyyy"];
            string = [formatter stringFromDate:[NSDate date]];
            [formatter setDateFormat:@"MM-dd"];
            string = [formatter stringFromDate:[NSDate date]];
            [formatter setDateFormat:@"MM-yyyy"];
            string = [formatter stringFromDate:[NSDate date]];
        }
        end = CACurrentMediaTime();
        printf("NSDateFormatter:                   %8.2f ms\n", (end - begin) * 1000);
    }
------不同format格式對象與同一對象設(shè)置不同格式對比------
NSDateFormatter:different format     27.89 ms
NSDateFormatter:                     16.16 ms
NSDateFormatter:different format     25.33 ms
NSDateFormatter:                     14.11 ms
NSDateFormatter:different format     28.51 ms
NSDateFormatter:                     15.62 ms

個人覺得創(chuàng)建一個單例即可拔鹰,沒有必要按格式創(chuàng)建多個仪缸,dateFormatter初次使用時消耗較大,設(shè)置format格式卻并沒有什么影響列肢。

dateFromString方法我也測試過恰画,結(jié)論基本一致便不一一嘮叨了

謝謝閱讀~~_

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瓷马,隨后出現(xiàn)的幾起案子拴还,更是在濱河造成了極大的恐慌,老刑警劉巖欧聘,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件自沧,死亡現(xiàn)場離奇詭異,居然都是意外死亡树瞭,警方通過查閱死者的電腦和手機(jī)拇厢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晒喷,“玉大人孝偎,你說我怎么就攤上這事×骨茫” “怎么了衣盾?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵寺旺,是天一觀的道長。 經(jīng)常有香客問我势决,道長阻塑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任果复,我火速辦了婚禮陈莽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘虽抄。我一直安慰自己走搁,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布迈窟。 她就那樣靜靜地躺著私植,像睡著了一般。 火紅的嫁衣襯著肌膚如雪车酣。 梳的紋絲不亂的頭發(fā)上曲稼,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音湖员,去河邊找鬼躯肌。 笑死,一個胖子當(dāng)著我的面吹牛破衔,可吹牛的內(nèi)容都是我干的清女。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼晰筛,長吁一口氣:“原來是場噩夢啊……” “哼嫡丙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起读第,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤曙博,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后怜瞒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體父泳,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年吴汪,在試婚紗的時候發(fā)現(xiàn)自己被綠了惠窄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡漾橙,死狀恐怖杆融,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情霜运,我是刑警寧澤脾歇,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布蒋腮,位于F島的核電站,受9級特大地震影響藕各,放射性物質(zhì)發(fā)生泄漏池摧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一激况、第九天 我趴在偏房一處隱蔽的房頂上張望作彤。 院中可真熱鬧,春花似錦誉碴、人聲如沸宦棺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蹈丸,卻和暖如春成黄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背逻杖。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工奋岁, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人荸百。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓闻伶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親够话。 傳聞我的和親對象是個殘疾皇子蓝翰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,089評論 1 32
  • 面試題參考1 : 面試題[http://www.cocoachina.com/ios/20150803/12872...
    江河_ios閱讀 1,710評論 0 4
  • 父類實現(xiàn)深拷貝時,子類如何實現(xiàn)深度拷貝女嘲。父類沒有實現(xiàn)深拷貝時畜份,子類如何實現(xiàn)深度拷貝。? 深拷貝同淺拷貝的區(qū)別:淺拷...
    JonesCxy閱讀 991評論 1 7
  • iOS-性能優(yōu)化深入探究 上圖是幾種時間復(fù)雜度的關(guān)系欣尼,性能優(yōu)化一定程度上是為了降低程序執(zhí)行效率減低時間復(fù)雜度爆雹。如下...
    極客學(xué)偉閱讀 1,112評論 0 2
  • 當(dāng)我們開發(fā)iOS應(yīng)用時,好的性能對我們的App來說是很重要的愕鼓。你的用戶也希望如此钙态,但是如果你的app表現(xiàn)的反應(yīng)遲鈍...
    iOS開發(fā)攻城獅閱讀 1,521評論 0 14