背景
最近遇到了一个需求,我们有一批小程序的用户,在小程序产生的内容想要在app中展示,这批用户的id是从50亿开始的(很难想象,我们公司的用户什么时候能突破50亿。。。),而我们app现在的userId是使用NSInteger
,我们要确保userId的使用没有问题。
我搜索了下相关资料,iOS的设备,从iphone5s起,全部使用64位的处理器,之前的都是32位处理器。而NSInteger
在32位和64位机器上面表现范围如何呢?且往下看
32位和64位NSInteger定义
|
|
32位系统
int占4个字节(byte) 32位(bit)
2^32 = 4294967296, NSInteger有正负,则范围为: -2147483648 ~ 2147483647
NSInteger 是 int 别称,占4个字节,32位,范围: -2147483648 ~ 2147483647
NSUInteger 不带符号,占4个字节,32位 范围: 0 ~ 4294967295
long 占4个字节 32位 范围: -2147483648 ~ 2147483647
long long 占8个字节 64位 范围: -9223372036854775808 ~ 9223372036854775807
64位系统
int占4个字节(byte) 32位(bit) 范围: -2147483648 ~ 2147483647
long 占8个字节 64位 范围: -9223372036854775808 ~ 9223372036854775807
NSInteger 是 long 的别称,占8个字节 64位 范围等同long: -9223372036854775808 ~ 9223372036854775807
NSUInteger 不带符号,占 8个字节, 64 位, 范围: 0 ~2^64-1
long long 占8个字节,64位: -9223372036854775808 ~ 9223372036854775807
id之类的,该用什么类型呢?
目前看,前端大部分都是使用int或者string,这两个类型其实都可以,但考虑到后期发展可能遇到的类似我遇到的范围问题,我觉得统一成string会好一些。
后台的话,考虑的就不只是前端的兼容和适配问题,还有诸如性能,容量,速度等,我看很多人推荐使用UUID
,以下两篇文章是我阅读中看到的,感兴趣的话可以都查下相关资料。