我想限制一个方法可以调用的频率。 我的目的是限制我处理API回调的速率。 (有些API回调只是在我想要的时候才会停止)。
我有一个有效的解决方案,请提供更清洁的解决方案。
请提供更好的解决方案。
-(void)callbackRateLimited:(id)someDataProvided {
static NSDate *date;
static NSUInteger count;
if (!date) {
date = [NSDate new];
count = 0;
}
double duration = fabs([date timeIntervalSinceNow]);
NSLog(@"Duration :%f count:%lu",duration,count);
if (count == 0) {
NSLog(@"No waiting... processing API");
[self processAPICallback];
count++;
return;
}
if (duration < 10.0f) { // 10 seconds
NSLog(@"waiting.... too fast slow down");
return;
}
NSLog(@"reset waiting state");
//count = 0; not required here.
date = nil;
}
答案 0 :(得分:2)
以下内容应该有效。这有以下几点:
lastTime
一个类变量而不是静态变量。
- (void) callbackRateLimited:(id)someDataProvided
{
static NSDate *lastTime = nil;
if (!lastTime) {
lastTime = [NSDate distantPast];
}
NSDate *now = [NSDate date];
if ([now timeIntervalSinceDate:lastTime] > 10) {
lastTime = now;
[self processAPICallback];
}
}