2016-05-15 150 views

回答

5

official Apple documentation

字符串桥接到目标C为的NSString,和一个字符串, 起源在Objective-C可以存储在一个NSString其字符。

由于所有设备都能够运行iOS,因此都是32位,这意味着NSUIntegerMax是2^32。

根据Swift opensource GitHub repo它的值似乎是2^64 = 18,446,744,073,709,551,615;十六进制0xFFFFFFFFFFFFFFFF为64台设备,以下的代码:

#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 
... 

TEST:(在iPhone 6)

enter image description here

+0

Whait是什么?它是iPhone 5S上的64位! – 123FLO321

+0

当然,你有理由,我忘了NSUInteger转换为32位的int和长到64位,好的答案更新。 –

3

String桥接到目标C作为NSStringString 起源在Objective-C可以存储在一个 NSString其字符。由于NSString的任意子类可以变为String,所以在这种情况下不存在关于表示或效率的保证。

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

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

根据意见: 对于iPhone 5S及以上版本,因为它们是64位。它的2 ^(64 - 1)

+0

注意,4个十亿字符将达到超过4GB的存储器,这对任何系统都是很重要的。 Xcode在我的活动监视器上使用最多的内存,现在为整个应用程序提供2 GB的内存。 – shim

+2

对于iPhone 5S及以上版本,它是2 ^(64 - 1),因为它们是64位。只需在我的6S和4S上进行测试即可。 – 123FLO321

相关问题