3

我们的 iOS 应用程序中有一个简单的标记解析器,它接收带有类似 HTML 标记的文本,并NSAttributedString通过迭代简单的每个字符NSString并生成一个NSMutableAttributedString.

在最坏的情况下,我们在迭代字符串时为每个字符添加一组新属性,是否NSMutableAttributedString足够智能将相同的相邻属性范围连接在一起并进行优化?或者在 Core Text 中渲染会非常低效和缓慢吗?

我并不是说这是一个很好的算法!我只是在看最坏的情况,想知道是否NSMutableAttributedString有任何内置的智能行为?

4

1 回答 1

3

我刚刚尝试过这样的事情(我的真实代码的简化版本):

NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString:@"Testfoobarhey"];
UIFont *font = [UIFont fontWithName:@"Georgia-Bold" size:12.0];
[text addAttribute:NSFontAttributeName value:font range:NSMakeRange(4, 3)];
[text addAttribute:NSFontAttributeName value:font range:NSMakeRange(7, 3)];

换句话说,我添加了两个相邻的粗体属性。然后我查看了结果:

NSLog(@"%@", text);

输出显示了三个文本块:普通字体的“Test”、粗体的“foobar”和普通字体的“hey”。

所以回答你的问题,是的,看起来两个相邻的格式范围是在 NSMutableAttributedString 中自动加入的。

PS 在相关说明中,我注意到,如果我应用一个范围跨越换行符的属性,则生成的 NSAttributedString 将在换行符之前和之后有一个属性,并且换行符本身不会有任何属性。因此,如果您一次解析一个字符,您可能需要对此进行补偿。

于 2013-05-15T12:23:05.643 回答