性能優(yōu)化之 NSDateFormatter

作者:tingxins
鏈接:http://www.reibang.com/p/82c1104aea6c#nsdateformatter
來(lái)源:簡(jiǎn)書
著作權(quán)歸作者所有唤冈。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)伦糯,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處够庙。

為什么要優(yōu)化NSDateFormatter?
首先蓝纲,過(guò)度的創(chuàng)建NSDateFormatter用于NSDate與NSString之間轉(zhuǎn)換阴孟,會(huì)導(dǎo)致App卡頓,打開(kāi)Profile工具查一下性能税迷,你會(huì)發(fā)現(xiàn)這種操作占CPU比例是非常高的永丝。據(jù)官方說(shuō)法,創(chuàng)建NSDateFormatter代價(jià)是比較高的箭养,如果你使用的非常頻繁慕嚷,那么建議你緩存起來(lái),緩存NSDateFormatter一定能提高效率。
優(yōu)化方式有哪些喝检?

a.延遲轉(zhuǎn)換
即只有在UI需要使用轉(zhuǎn)換結(jié)果時(shí)在進(jìn)行轉(zhuǎn)換嗅辣。

b.Cache in Memory
根據(jù)NSDateFormatter線程安全性,不同的iOS系統(tǒng)版本內(nèi)存緩存如下:

prior to iOS 7
如果直接采用靜態(tài)變量進(jìn)行存儲(chǔ)挠说,那么可能就會(huì)存在線程安全問(wèn)題澡谭,在iOS 7之前,NSDateFormatter是非線程安全的损俭,因此可能就會(huì)有兩條或以上的線程同時(shí)訪問(wèn)同一個(gè)日期格式化對(duì)象蛙奖,從而導(dǎo)致App崩潰。

+ (NSDateFormatter *)cachedDateFormatter {

NSMutableDictionary *threadDictionary = [[NSThread currentThread] threadDictionary];

NSDateFormatter *dateFormatter = [threadDictionary objectForKey:@"cachedDateFormatter"];

if (!dateFormatter) {

dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setLocale:[NSLocale currentLocale]];

[dateFormatter setDateFormat: @"YYYY-MM-dd HH:mm:ss"];

[threadDictionary setObject:dateFormatter forKey:@"cachedDateFormatter"];

}

return dateFormatter;

}

iOS 7 or later
在iOS 7杆兵、macOS 10.9及以上系統(tǒng)版本雁仲,NSDateFormatter都是線程安全的,因此我們無(wú)需擔(dān)心日期格式化對(duì)象在使用過(guò)程中被另外一條線程給修改琐脏,為了提高性能攒砖,我們還可以在上述代碼塊中進(jìn)行簡(jiǎn)化(除去冗余部分)。

static NSDateFormatter *cachedDateFormatter = nil;

+ (NSDateFormatter *)cachedDateFormatter {

// If the date formatters aren't already set up, create them and cache them for reuse.

if (!dateFormatter) {

dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setLocale:[NSLocale currentLocale]];

[dateFormatter setDateFormat: @"YYYY-MM-dd HH:mm:ss"];

}

return dateFormatter;

}

如果緩存了日期格式化或者是其他依賴于current locale的對(duì)象骆膝,那么我們應(yīng)該監(jiān)聽(tīng)NSCurrentLocaleDidChangeNotification通知祭衩,當(dāng)current locale變化時(shí)及時(shí)更新被緩存的日期格式化對(duì)象灶体。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末阅签,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蝎抽,更是在濱河造成了極大的恐慌政钟,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件樟结,死亡現(xiàn)場(chǎng)離奇詭異养交,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)瓢宦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門碎连,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人驮履,你說(shuō)我怎么就攤上這事鱼辙。” “怎么了玫镐?”我有些...
    開(kāi)封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵倒戏,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我恐似,道長(zhǎng)杜跷,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮葛闷,結(jié)果婚禮上憋槐,老公的妹妹穿的比我還像新娘。我一直安慰自己淑趾,他們只是感情好秦陋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著治笨,像睡著了一般驳概。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上旷赖,一...
    開(kāi)封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天顺又,我揣著相機(jī)與錄音,去河邊找鬼等孵。 笑死稚照,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的俯萌。 我是一名探鬼主播果录,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼咐熙!你這毒婦竟也來(lái)了弱恒?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤棋恼,失蹤者是張志新(化名)和其女友劉穎返弹,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體爪飘,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡义起,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了师崎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片默终。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖犁罩,靈堂內(nèi)的尸體忽然破棺而出齐蔽,到底是詐尸還是另有隱情,我是刑警寧澤昼汗,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布肴熏,位于F島的核電站,受9級(jí)特大地震影響顷窒,放射性物質(zhì)發(fā)生泄漏蛙吏。R本人自食惡果不足惜源哩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一郁稍、第九天 我趴在偏房一處隱蔽的房頂上張望倒得。 院中可真熱鬧,春花似錦吼过、人聲如沸泼诱。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)治筒。三九已至屉栓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間耸袜,已是汗流浹背友多。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留堤框,地道東北人域滥。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蜈抓,于是被迫代替她去往敵國(guó)和親启绰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

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

  • 為什么要優(yōu)化NSDateFormatter沟使? 首先委可,過(guò)度的創(chuàng)建NSDateFormatter用于NSDate與NS...
    Crazy2015閱讀 667評(píng)論 0 0
  • 為什么要優(yōu)化NSDateFormatter? 優(yōu)化方式有哪些格带? 為什么要優(yōu)化NSDateFormatter撤缴? 首先...
    tingxins閱讀 7,194評(píng)論 2 20
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件叽唱、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,103評(píng)論 4 62
  • 不知道在什么時(shí)候 也不知道在哪一天 你悄悄撥動(dòng)了我的心弦 奏出了一曲美秒的樂(lè)章 有一種感覺(jué)叫妙不可言 如夢(mèng)似幻,幸...
    yzwjjx閱讀 112評(píng)論 0 0
  • “你我都不可能擺脫時(shí)鐘的束縛微宝,彼此都已淪為社會(huì)這個(gè)時(shí)鐘的齒輪棺亭。一旦少了齒輪,時(shí)鐘就會(huì)出亂子蟋软∠庹縱然自己渴望率性而為,...
    SEVEN_24閱讀 1,257評(píng)論 0 2