开发中,遇到计算时间差的问题,利用CFAbsoluteTimeGetCurrent()可以很方便的进行计算

实例:

场景:类似购物车中修改商品数量的功能,如下图所示,要求,修改完的数量,要同步到服务器。

分析:如果点击“+”或者“-”,立即进行服务器同步的话,代价貌似有些高,所以采用延时提交的方法:“连续”点击的时候,不提交到服务器,点击停止,进行同步。这个项目中,“连续”点击的判断,采用的是判断两次点击的时间差,如果时间差小于一定的数值(本例中,这个数值是2),那么即可判定是连续点击的操作。代码如下:

- (void) editCount {
double diff = ;
if (_startTime == ) {//开始的时候,将_startTime和_endTime设置初始化为0
_startTime = CFAbsoluteTimeGetCurrent();
_endTime = _startTime;
}
else {
_endTime = CFAbsoluteTimeGetCurrent();
diff = _endTime - _startTime;
_startTime = _endTime;
} NSLog(@"start = %lf,end = %lf,diff = %lf",_startTime,_endTime,diff);
NSString * testStr = @"just for test"; if (diff < ) {//是连续点击,取消同步到服务器
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(willUpdateServerCartWithCount:) object:testStr];
}   //开启一个新的延时执行
[self performSelector:@selector(willUpdateServerCartWithCount:) withObject:testStr afterDelay:];
}

注意:cancelPreviousPerformRequestsWithTarget:selector:object:方法和performSelector:withObject:afterDelay:方法中,object参数需要保值一直,前者才能起作用,如上述代码中,object参数都是"just for test"。

最新文章

  1. Lession1 写在机器学习之前
  2. inverse
  3. Sla子分类账表结构
  4. maven+spring+springMVC+mybatis+dubbox
  5. 读《程序员的SQL金典》[4]--SQL调优
  6. BAT 遍历文件夹和子文件夹下所有文件
  7. IE6 IE7 hasLayout bug之li间的3px垂直间距
  8. HDU 4607 Park Visit 两次DFS求树直径
  9. Ruby on Raisl应用(一):在Rails上配置Mongoid+Mongodb
  10. 实例分析jdom和dom4j的使用和区别
  11. 分割gbk中文出现乱码的问题解决
  12. android 自定义AlertDialog
  13. fragement切换动画效果的实现
  14. [LeetCode]Rotate Image(矩阵旋转)
  15. java:包、继承,访问修饰符
  16. 【原创】运维基础之Docker(4)实用工具ctop
  17. CSS3 Vendor-prefixing
  18. dotnetcore-officeaddin-toolbox : Office 365 Add-in开发人员的工具箱
  19. html问题汇总
  20. RFC2616-HTTP1.1-Status Code(状态码规定部分—译文)

热门文章

  1. 9.OpenStack安装web界面
  2. Git-stash操作
  3. c++ 堆、栈、自由存储区、全局/静态存储区和常量存储区
  4. django自定义signal的发送和接收样例
  5. NetStream论文
  6. 在linux下给grep命令添加颜色
  7. INFORMATION_SCHEMA获取数据库的信息
  8. linux-后台运行程序-nohup
  9. Oracle多用户对一个表进行并发插入数据行操作
  10. sharepoint2010新建网站与网站集