項(xiàng)目里面的舊代碼有個(gè)類(lèi)似通訊錄的需求,通訊錄里的聯(lián)系人根據(jù)姓名首字母分section顯示弛矛。于是就需要獲取首字母比然。
原代碼里對(duì)于通訊里的聯(lián)系人在本地建表進(jìn)行了存儲(chǔ),但是對(duì)于首字母沒(méi)有存儲(chǔ)万俗,采取的讀數(shù)據(jù)庫(kù)時(shí)即時(shí)解析首字母進(jìn)行顯示。采用就是系統(tǒng)的API
Boolean CFStringTransform(CFMutableStringRef string, CFRange *range, CFStringRef transform, Boolean reverse);
后來(lái)發(fā)現(xiàn)用戶(hù)反映,這個(gè)頁(yè)面卡頓情況特別嚴(yán)重闰歪,然后經(jīng)過(guò)測(cè)試發(fā)現(xiàn)該API特別耗時(shí)引起。
后續(xù)就舍棄這個(gè)方法临扮,采用在網(wǎng)上找到的一個(gè)開(kāi)源庫(kù)
PinYin4Objc是一個(gè)效率很高的漢字轉(zhuǎn)拼音類(lèi)庫(kù)教翩,智齒簡(jiǎn)體和繁體中文.
雖然轉(zhuǎn)化效率有了明顯的提高.但實(shí)際上當(dāng)數(shù)據(jù)量達(dá)到一定量的時(shí)候,還是會(huì)很耗時(shí)饱亿。
但是實(shí)際上,我覺(jué)得最好的設(shè)計(jì)還是在存儲(chǔ)聯(lián)系人信息的時(shí)候,將首字母也一起存儲(chǔ)在本地?cái)?shù)據(jù)庫(kù)中关霸。這樣在讀取的時(shí)候才會(huì)不受數(shù)據(jù)量的影響杰扫。