今天收到一个瓦工助手用户的反馈,说磁盘和流量的数据显示不正确,刚开始还挺奇怪的,因为App上线这么久还没听说过有这样的问题,直到他截图发过来,看到数字是负数,才意识到可能是数字溢出了。

跟踪了一下代码,发现我对磁盘空间和流量统计里用的都是Int(因为Swift没有long类型),而Int在32位系统和64位系统下的最大长度是不一样的,具体如下:

  • 32位系统:Int长度与Int32一致,范围为-2,147,483,648 ~ 2,147,483,647
  • 64位系统:Int长度与Int64一致。

现在还在运行32位iOS的设备已经很少了,而这个用户使用的是iPhone 5,最后一款32位的手机,这就是到现在才发现这个问题的原因。

知道了问题原因,解决起来就简单了,只要把所有的Int改成Int64就好了,在可预知的未来,Int64应该不会越界了。:)