最佳限制方法调用速率,即可以调用方法的频率



我想限制可以调用方法的频率。 我这样做的目的是限制我处理 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; 
}

像下面这样的东西应该可以工作。这有以下注意事项:

  • 您不想在未收到后处理忽略的数据 叫了一会儿。
  • 您希望同时限制类的所有实例的回调速率。如果要限制每个对象实例,请使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];
}
}

最新更新