zoukankan      html  css  js  c++  java
  • IOS开发之 ---- 苹果系统代码汉字转拼音

    NSString *hanziText = @"我是中国人";  
    if ([hanziText length]) {  
        NSMutableString *ms = [[NSMutableString alloc] initWithString:hanziText];  
        if (CFStringTransform((__bridge CFMutableStringRef)ms, 0, kCFStringTransformMandarinLatin, NO)) {  
            NSLog(@"pinyin: %@", ms);  
        }  
        if (CFStringTransform((__bridge CFMutableStringRef)ms, 0, kCFStringTransformStripDiacritics, NO)) {  
            NSLog(@"pinyin: %@", ms);  
        }  
     
     
     
     
     

    最近做一个通讯录项目,需要将联系人读入app内存(通讯录有400人左右),并依照首字母排序。这里使用了在将汉字转化成拼音的时候,iOS系统自带接口:

    注意self.latinString需要是一个mutable的string

    //1.将非字符串转化成拉丁字母
            CFStringTransform((__bridge CFMutableStringRef)self.latinString, NULL, kCFStringTransformMandarinLatin, NO);
            CFStringTransform((__bridge CFMutableStringRef)self.latinString, NULL, kCFStringTransformStripDiacritics, NO);

    但是,app启动时候,非常的慢。因为在加载联系人,并且将汉字转化成pinyin。下面看看对比结果:

    如果直接转化:

    >> 2014-10-17 16:14:03.988 [contact_log] ContactList.m:87 -[ContactList loadContactFromAB] :_addressBookEngine loadAdressBook 10.022583

    加载一遍用了10秒。

    我的做法是:既然通讯录里的人不会经常改变,可以将所有人的名字——pinyin缓存起来(字典),这样读取的时候,从字典里获取拼音,应该会快很多!结果验证了我的猜想:

    >> 2014-10-17 16:18:47.992 [contact_log] ContactList.m:87 -[ContactList loadContactFromAB] :_addressBookEngine loadAdressBook 0.641795

    加载一次不到1秒了。

    另附:参考:http://blog.sina.com.cn/s/blog_71715bf80102v655.html

  • 相关阅读:
    Asp.Net Core MVC + Code First + Mysql 项目创建以及相关配置
    linux安装 docker compose v2
    压缩、解压 解决 客户端查询大批量数据时等待时间过长的问题
    c# 通过经纬度 查询地址、区域信息
    excel 文件转 dataset ,jqgrid 中 模糊查询与下拉联动的实现
    jqgrid mvc 导出excel
    SQL学习笔记三表的字段操作
    SQL学习笔记高级教程
    安装docker
    SQL学习笔记一数据类型
  • 原文地址:https://www.cnblogs.com/tig666666/p/4799093.html
Copyright © 2011-2022 走看看