【问题标题】:In Swift 2.0 what is the maximum length of a string?在 Swift 2.0 中,字符串的最大长度是多少?
【发布时间】:2016-09-11 02:42:56
【问题描述】:

我有一个使用单个字符串的应用程序。此字符串包含从数组加载的数据,然后将字符串导出到文本文件。

我的问题是这个字符串可能的最长长度是多少,什么时候它会变得太长?

【问题讨论】:

    标签: ios string swift string-length maxlength


    【解决方案1】:

    关注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 上)

    【讨论】:

    • 什么什么? iPhone 5S 及更高版本为 64 位!
    • 当然,你有理由,我忘了 NSUInteger 转换为 int 32 位和 long 到 64 位,好的答案更新。
    【解决方案2】:

    StringNSStringString 桥接到Objective-C 起源于 Objective-C 的可能会将其字符存储在一个 NSString。因为NSString 的任意子类都可以 成为String,不保证代表或 在这种情况下效率。

    NSString 对象的最大长度是多少?

    NSString 的硬性限制为 NSUIntegerMax 个字符。 NSUIntegerMax 是 2^32 - 1,NSString 可以容纳超过 42 亿个字符。

    根据 cmets: 适用于 iPhone 5S 及更高版本,因为它们是 64 位。它是 2^(64 - 1)

    【讨论】:

    • 请注意,40 亿个字符相当于超过 4 GB 的内存,这对于任何系统来说都很大。 Xcode 目前在我的 Activity Monitor 上使用的内存最多,整个应用程序的内存为 2 GB。
    • iPhone 5S 及更高版本为 2^(64 - 1),因为它们是 64 位。只需在我的 6S 和 4S 上进行测试即可。
    猜你喜欢
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多