NSAttributedString的内部数据结构?

时间:2014-02-26 22:28:03

标签: objective-c data-structures subclass nsattributedstring

我想继承NSAttributedString,但我不知道内部存储是怎样的。 NSAttributedString是NSObject的子类。很可能它使用NSString存储字符和另一个数据结构来跟踪属性(例如颜色,字体)。

属性存储在NSDictionary中对某个字符范围(NSRange)有效,但属性也可以在字符范围内重叠。

什么样的高效数据结构适合这种情况?为每个角色存储字典可能不是这样做的。

编辑: 我不知道我有多明确?我有我的自定义NSString子类,它可以完成我想要它做的事情。现在我想添加默认属性(颜色,字体类型,字体大小=> NSFontAttributeName,NSForegroundColorAttributeName等)。我想在NSTextView或UITextView中使用自定义字符串和我自己的自定义NSTextStorage。 NSTextStorage要求您提供自己的数据属性。我有字符串,但我仍然需要文本属性。

编辑: 为什么要定制NSAttributedString?我需要自己的自定义NSString(没有别的办法,我试过)。该字符串必须显示给用户,并且需要NSAttributedString / NSTextStorage。所以我还需要制作一个自定义的NSAttributedString。

2 个答案:

答案 0 :(得分:1)

定义属性运行数组。将属性运行定义为具有以下属性的自定义对象:NSRange范围和NSMutableDictionary *属性。使用您自己在数组中查找的实现覆盖docs中描述的NSAttributedString的所有方法。现在你有自定义的属性字符串类,它与original完全可比,并且是它的子类。

(请注意,基础逻辑可能难以有效实施。如果您说出大局是什么,有人可能会提出另一种/更简单的方法来解决您的任务)

答案 1 :(得分:1)

NSAttributedString toll-free bridged CFAttributedString。反过来,CFAttributedString是一种不透明的类型。在任何情况下,Apple都不会记录或提供对内部数据存储的访问。因此,您所要求的信息没有官方来源。