本文共 958 字,大约阅读时间需要 3 分钟。
我们遇到了一个需求是这样的:
用户连续点击某按钮,每点击一次数量增加一个,当两次点击之间的时间间隔超过0.5s的时候,把这次连续点击的个数上报给服务器。 思路一: 使用定时器,当第一次点击的时候,设置定时器为0s,触发定时器,当定时器增加到0.5s并且没有接收到任何点击的时候,停止计时器并上报数据。当下一次点击在0.5s内的时候,把定时器重新设置从0开始计时。 但是,使用定时器容易造成内存泄漏,所以尽量少的使用定时器。 要实现这个需求,不使用定时器也是可以完成的。 思路二: 使用延迟执行方法来实现。当点击的时候取消之前的方法响应,当超过0.5s的时候自动执行上报方法。说起来比较绕,代码实现超简单哟。//按钮的点击方法- (IBAction)juziClick:(id)sender { self.clickJuziCount++;//点击次数增加 self.data.credit_num++;//业务相关逻辑 self.haveJuziCount.text = [NSString stringWithFormat:@"收到了%ld个橘子",self.data.credit_num];//业务相关//以下两句是关键 [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(addJuziCount) object:nil]; [self performSelector:@selector(addJuziCount) withObject:nil afterDelay:0.5];}//增加橘子数量,上传至服务器-(void)addJuziCount{ // NSLog(@"------bbbb----------- %d",self.clickJuziCount); [PublicTool showMsg:[NSString stringWithFormat:@"增加了 %d 个橘子",self.clickJuziCount]];//上报服务器}
你可以觉得我是投机取巧,但是,只要实现了功能,并且节省代码,性能也不错,不是挺好的吗?
欢迎各位小伙伴们批评指正。转载地址:http://cdjka.baihongyu.com/