我们遇到了一个需求是这样的:
用户连续点击某按钮,每点击一次数量增加一个,当两次点击之间的时间间隔超过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]];
//上报服务器
}
你可以觉得我是投机取巧,但是,只要实现了功能,并且节省代码,性能也不错,不是挺好的吗?
欢迎各位小伙伴们批评指正。