为什么用iOS5创建带有中文文本的framesetter非常慢

时间:2012-04-05 13:41:55

标签: iphone objective-c ios core-text

我发现在iOS5中使用CTFramesetterCreateWithAttributedString创建带有中文字符串的framesetter非常慢,但在iOS4中,它很快。

我运行了这样的测试: (chinese.txt包含77571个中文字符,english.txt包含233727个字符)

 NSString *englishCtn = [NSString stringWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", [self documentDirectory], @"english.txt"] encoding:NSUTF8StringEncoding error:nil];
 NSAttributedString *englishCtnA = [[NSAttributedString alloc] initWithString:englishCtn];
 NSString *chineseCtn = [NSString stringWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", [self documentDirectory], @"chinese.txt"] encoding:NSUTF8StringEncoding error:nil];
 NSAttributedString *chineseCtnA = [[NSAttributedString alloc] initWithString:chineseCtn];

double start = [[NSDate date] timeIntervalSince1970];
CTFramesetterCreateWithAttributedString((CFAttributedStringRef)englishCtnA);
NSLog(@"english length:%d time %f", englishCtn.length, ([[NSDate date] timeIntervalSince1970] - start) * 1000);

start = [[NSDate date] timeIntervalSince1970];
CTFramesetterCreateWithAttributedString((CFAttributedStringRef)chineseCtnA);
NSLog(@"chinese length:%d time %f", chineseCtnA.length, ([[NSDate date] timeIntervalSince1970] - start) * 1000);
iOS 5中的

结果是:

中文长度:77571时间:12140.347004

英文长度:233727时间:75.886011

在iOS 4中

的结果是:

中文长度:77571时间:53.114176

英文长度:233727时间:55.696011

我使用xCode工具时间分析器来查看发生了什么,我发现函数TRun :: GetNextLigatureCandidateCharRange(long)占用了大部分时间,我不知道如何优化,帮助

1 个答案:

答案 0 :(得分:0)

运行时的C ++部分很大程度上,如果不是在iOS 5中完全添加的话,那就是失败的地方。对我来说,这表明你应该向苹果公司提交一份错误报告,或者如果你有剩余的话,可以在你的帐户上打开一个查询。