你好,游客 登录 注册 搜索
背景:
阅读新闻

iOS开发中遇到的有关数据类型的问题

[日期:2016-07-13] 来源:简书  作者:不会凉的黄花菜 [字体: ]

历时8个月,Do.Fun终于上线了。可是上线后第二天,一个测试的同事,用自己的iPhone5手机,测出飞机时间不对的问题。而使用5s、6、6s时间正常。

先来谈谈这个bug发生的场景,Do.Fun是为一款为小型口袋无人机DOBBY服务的应用。飞机开机释放WiFi,手机连接飞机热点。因为飞机没有时间,所以打开APP,APP会获取手机系统时间,然后发送设置时间指令,为飞机设置时间。

因为给飞机设置时间的指令数据包中,时间占8个字节。因此我就选用了long来接受从手机获取的当前系统时间。代码如下:

NSDate *datenow = [NSDate date];//现在时间
//转换时区
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate:datenow];
NSDate *localeDate = [datenow  dateByAddingTimeInterval: interval];

NSTimeInterval time=[localeDate timeIntervalSince1970]*1000;
long i=time;      //NSTimeInterval返回的是double类型

因为没有4和4s的测试机,所以设置时间这个功能一直没出问题。直到iPhone5的出现。。。

用iPhone5连接飞机设置时间后,飞机时间并不是当前时间,而是1989年。Fuck,这是什么bug。刚开始怀疑是飞机的问题(我的代码怎么会出问题,肯定是飞机那边又出什么幺蛾子了),可是在查看代码的时候,突然想到iPhone5是32的架构,那么long在32位系统下占多少个字节?一查,懵逼了,32位下long占4个字节。好吧,肯定是数据溢出了。当将long 改为 long long一试,OK了。

NSTimeInterval time=[localeDate timeIntervalSince1970]*1000;
long long i=time;      //NSTimeInterval返回的是double类型

iPhone 5没有64位的,只有32位架构,苹果是从iPhone 5s开始对全线移动产品使用64位架构。iPhone 5s发布之后的所有产品都是64位的。

不同系统架构下,各数据类型所占字节





收藏 推荐 打印 | 录入:elainebo | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款