【发布时间】:2016-09-11 02:42:56
【问题描述】:
我有一个使用单个字符串的应用程序。此字符串包含从数组加载的数据,然后将字符串导出到文本文件。
我的问题是这个字符串可能的最长长度是多少,什么时候它会变得太长?
【问题讨论】:
标签: ios string swift string-length maxlength
我有一个使用单个字符串的应用程序。此字符串包含从数组加载的数据,然后将字符串导出到文本文件。
我的问题是这个字符串可能的最长长度是多少,什么时候它会变得太长?
【问题讨论】:
标签: ios string swift string-length maxlength
关注official Apple documentation:
String 作为 NSString 桥接到 Objective-C,而 String 起源于 Objective-C 的字符可以存储在一个 NSString 中。
由于所有能够运行 iOS 的设备都是 32 位的,这意味着 NSUIntegerMax 是 2^32。
根据Swift opensource GitHub repo 看来,它的值是 2^64 = 18,446,744,073,709,551,615 ; 64 位设备的十六进制 0xFFFFFFFFFFFFFFFF,如下代码:
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif
// + (instancetype)
// stringWithCharacters:(const unichar *)chars length:(NSUInteger)length
...
maxLength:(NSUInteger)maxBufferCount
...
测试:(在 iPhone 6 上)
【讨论】:
String 以NSString 和String 桥接到Objective-C
起源于 Objective-C 的可能会将其字符存储在一个
NSString。因为NSString 的任意子类都可以
成为String,不保证代表或
在这种情况下效率。
NSString 对象的最大长度是多少?
NSString 的硬性限制为 NSUIntegerMax 个字符。 NSUIntegerMax 是 2^32 - 1,NSString 可以容纳超过 42 亿个字符。
根据 cmets: 适用于 iPhone 5S 及更高版本,因为它们是 64 位。它是 2^(64 - 1)
【讨论】: