项目里面的旧代码有个类似通讯录的需求,通讯录里的联系人根据姓名首字母分section显示。于是就需要获取首字母。
原代码里对于通讯里的联系人在本地建表进行了存储,但是对于首字母没有存储,采取的读数据库时即时解析首字母进行显示。采用就是系统的API
Boolean CFStringTransform(CFMutableStringRef string, CFRange *range, CFStringRef transform, Boolean reverse);
后来发现用户反映,这个页面卡顿情况特别严重,然后经过测试发现该API特别耗时引起。
后续就舍弃这个方法,采用在网上找到的一个开源库
PinYin4Objc是一个效率很高的汉字转拼音类库,智齿简体和繁体中文.
虽然转化效率有了明显的提高.但实际上当数据量达到一定量的时候,还是会很耗时。
但是实际上,我觉得最好的设计还是在存储联系人信息的时候,将首字母也一起存储在本地数据库中。这样在读取的时候才会不受数据量的影响。