NSString对象最大支持多长的字符串?
它是否可以动态更改?
NSString对象最大支持多长的字符串?
它是否可以动态更改?
我认为NSString的硬限制应该是NSUIntegerMax个字符,因为NSString的索引和大小相关方法返回一个NSUInteger。由于当前能够运行iOS的所有设备都是32位的,这意味着NSUIntegerMax是2^32-1,NSString可以容纳略多于42亿个字符。
正如其他人指出的那样,在实践中,可用内存远远小于NSString的硬限制,特别是在iOS设备上,你很快就会耗尽内存,而不是达到NSString的硬限制。
NSUIntegerMax
加上 1
-- 否则 length
将无法在范围的一端或另一端返回正确的值。 - jscsunichar
来存储字符,它们占用两个字节;但是,如果所有字符都可以用普通 ASCII 表示,那么它们会尝试节省内存,每个字符只使用一个字节 -- 参见 String Storage。 - jscsNSString
实际上是一个类族(class-cluster),因此不同的具体类(比如NSString
与NSMutableString
)在存储数据时可能会使用不同的“后备存储区域”。您甚至可以子类化NSString
,为您可能有的特定需求提供自己的后备存储实现(请参阅“NSString的子类说明”)。关于哪种后备存储实际上被NSString
使用,这是Apple没有记录的实现细节,它可能随时更改。NSString
的最大长度仅受可用内存的限制。实际上,由于可用内存可能非常巨大,还会有其他限制(也许与性能相关),但我从未遇到过这种限制。它可以容纳几乎与虚拟存储系统表示的内存量一样多的内存。但我个人认为,最大长度仅限于当时可用的内存。