关于一个时间间隔bug的来源

需求,客户端互动添加3秒发言限制,用户本次方言后3秒之内发言提示:发言太快,请慢慢来。
1.第一次想法:在每一次发言成功的时候在本地存储当前发言的时间,在下次发言的时候拿两次的时间对比,小于3秒 提示发言太快,请慢慢来。leader让使用项目中已经封装好的mach_absolute_time()来计算每次时间间隔,这个效率比直接使用Data高
mach_absolute_time()代码:
+ (double)beginTime
{
return (double)mach_absolute_time();
}

+ (double)calculateTimeDifferent:(double)beginTime
{
uint64_t nowTime = mach_absolute_time();
// Elapsed time in mach time units
uint64_t elapsedTime = nowTime - beginTime;
static double ticksToNanoseconds = 0.0;
if (fabs(ticksToNanoseconds) < 0.0001)
{
mach_timebase_info_data_t timebase;
// to be completely pedantic, check the return code of this next call.
mach_timebase_info(&timebase);
ticksToNanoseconds = (double)timebase.numer / timebase.denom;
}
//时间差(单位:秒)
double elapsedTimeInSeconds = (elapsedTime * ticksToNanoseconds) / 1000000000.0f;

return elapsedTimeInSeconds;
}
将beginTime获取到的时间值存到了NSUserDefaults中
写好后自己测试没有问题。代码提交。

之后有一个用户反馈,进直播界面不能发言,发言一直弹出发言太快。
当时自己看了下自己的手机没有这个问题。。
只有一次,打开公司的app 线上环境,进直播 发言出现同样的情况,
回来上班后看一遍之前自己写的代码,没有看出什么问题,在真机和模拟器上都没有复现

昨天晚上又有一个同事出现这样的问题,leader让我在检查一下。
还是没有复现,把代码发给leader看了一下,他指出两个问题
1。三秒没有必要存在NSUserDefaults中
2.就是因为存在NSUserDefaults中下次重启后还能取到这个数字,所以一直发言失败

在后来我查了一下mach_absolute_time
mach_absolute_time是一个CPU/总线依赖函数,返回一个基于系统启动后的时钟”嘀嗒”数。它没有很好的文档定义,但这不应该成为使用它的障碍,因为在MAC OS X上可以确保它的行为,并且,它包含系统时钟包含的所有时间区域。那是否应该在产品代码中使用它呢?可能不应该。但是对于测试,它却恰到好处。
。。。。
所以bug 只要手机重启就能复现

产生这个bug的原因:
1.自己使用了自己并不懂的东西(没有去及时的查证,验证,一大失误)
2.时间间隔太短,没必要存在NSUserDefaults 中,而且我把时间存在了NSUserDefaults 中,
这两个原因造成了这个当时我认为无法复现的bug

再一次验证了一句话:所有的bug都有它必现的理由,只是你还没找到原因而已。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值