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

时间:2017-08-13 11:53:22

标签: ios objective-c

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

1 个答案:

答案 0 :(得分:2)

以下内容应该有效。这有以下几点:

  • 您不想在未收到数据后处理被忽略的数据 要求一段时间。
  • 您希望将所有类的实例的回调率限制在一起。如果要为每个对象实例限制它,那么make 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];
    }
}
相关问题