0

是否可以让 Ragel 在 NSMutableString 上工作?

我想使用 Ragel 生成 DFA 来标记 NSMutableString。这个“可变”部分意味着我不能cStringUsingEncoding:在单个字符发生变化时使用。据我所知,有两个问题:

  1. 即使在Objective C中,Ragel附带的示例似乎也用于char *获取字符。但我不知道如何获取指向不断变化的NSMutableString的指针。是否有可能迫使 RagelcharacterAtIndex:改用它?那会不会很慢?

  2. 如果我理解正确,NSString 可能会在运行时更改其内部表示,即它并不总是 UTF-16。例如,当它仅包含 ASCII 时,它使用单字节编码。但是一旦出现超出有效范围的字符,它就会切换到多字节编码。是否有可能在 Ragel 中解释这一点?

4

1 回答 1

0

在我的脑海中,我会CFStringRef直接使用,因为它有CFStringCreateMutableWithExternalCharactersNoCopy,它允许您声明自己的缓冲区并明确禁用您正在谈论的优化。

此外,如果您设置externalCharactersAllocator正确,您甚至可能受益于免费桥接(尽管这可能不起作用),因此对于任何使字符串发生突变的东西都不会变得太混乱。

于 2015-01-13T16:42:21.713 回答