为什么NSAttributedString不是用NSString继承的? NSAttributedString有父类作为NSObject为什么?

时间:2017-05-30 07:29:31

标签: ios nsstring nsattributedstring

为什么NSAttributedString不会继承NSStringNSAttributedString将父类设为NSObject为什么?

1 个答案:

答案 0 :(得分:1)

为什么你认为它是NSString的子类?到目前为止,此类修改了文本,NSStringNSAttributedString之间的相关性接近于比较NSStringUILabel

虽然可以在属性字符串上覆盖字符串上的相当多的方法,例如length,是空的,子字符串......但是其中许多方法可能没有。当将字符串插入到其他方法中时,情况会变得更糟:

例如,字体的字符串大小与属性字符串完全不同,因为它可能在内部保存字体信息。一个或另一个的绘图完全不同......

您能想象将一个属性字符串作为字符串发送到其他一些数据结构。例如,在不知不觉中将属性字符串打包到某些JSON数据或数据库中。当序列化时,它可能返回与NSString相同的值,但事实上,序列化为某种形式的XML或HTML更有意义。这样做的原因是你可以将它保存到某个地方以便重复使用它的所有数据。

无论如何,将NSString子类化为NSAttributedString是不正确的,因为两者的功能和数据结构太不相同了。你可以从一个绘图的角度来看一下我猜两个都可以和DrawableText有什么相同的超类。但是除此之外的一切都毫无意义。例如,如果您比较两个属性字符串,其中文本相同但属性不同,您会说这些是相同的吗?对大多数情况我会说不。无效的if !previousString.isEqual(newString) self.hasChanges = true需要与其属性不同。但是像dictionary[myMutableString]这样的下标不应该包含属性。

您可能会想“为什么有人会使用属性字符串作为键?”。这些事情是错误的。你有一个文本字段,有人通过在其上使用属性字符串使它变得更好,所以如果属性字符串被子类化,myTextField.text = myAttributedString将起作用。但是myTextField.text仍然被定义为普通字符串。所以dictionary[myTextField.text]看起来完全正确。