美文网首页程序员
限制一定时间内重复调用方法

限制一定时间内重复调用方法

作者: 江水东流 | 来源:发表于2017-12-20 10:10 被阅读167次

有时候我们要限制一些函数的调用频率,比如自动刷新,一分钟内不论谁调用这个函数,只能调用一次.这里提供一个简单好用的方法:
限制一定时间内重复调用方法: 整个app里 同一个name 的block里面的方法 limit秒时间内不可以执行
[JDRateLimit executeBlock:^{
[self refresh:nil ];
} name:@"方法名称,应唯一" limit:300.0];


.h
@interface JDRateLimit : NSObject
//限制一定时间内重复调用方法: 整个app里 同一个name 的block里面的方法 limit秒时间内不可以执行
+ (BOOL)executeBlock:(void(^)(void))block name:(NSString *)name limit:(NSTimeInterval)limit;
//移除限制
+ (void)resetLimitForName:(NSString *)name;
#import "JDRateLimit.h"

.m
@interface JDRateLimit ()
+ (NSMutableDictionary *)_dictionary;
@end

@implementation JDRateLimit

+ (BOOL)executeBlock:(void(^)(void))block name:(NSString *)name limit:(NSTimeInterval)limit {

    if (!block) {
        return NO;
    }
    
    //查看上次执行这个函数 到现在的时间间隔有没有达到时间间隔限制
    NSMutableDictionary *dictionary = [self _dictionary];
    NSDate *last = [dictionary objectForKey:name];
    NSTimeInterval timeInterval = [last timeIntervalSinceNow];
    
    // 如果时间间隔小于limit,这个函数不执行  
    if (timeInterval < 0 && fabs(timeInterval) < limit) {
        return NO;
    }
    
    // 执行
    block();
    [dictionary setObject:[NSDate date] forKey:name];
    return YES;
}

//移除限制
+ (void)resetLimitForName:(NSString *)name {
    [[self _dictionary] removeObjectForKey:name];
}


#pragma mark - Private

+ (NSMutableDictionary *)_dictionary {
    static NSMutableDictionary *dictionary = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        dictionary = [[NSMutableDictionary alloc] init];
    });
    return dictionary;
}

@end

相关文章

  • 限制一定时间内重复调用方法

    有时候我们要限制一些函数的调用频率,比如自动刷新,一分钟内不论谁调用这个函数,只能调用一次.这里提供一个简单好用的...

  • System.currentTimeMillis()

    System.currentTimeMillis() 方法的粒度大于1毫秒。如果你重复地调用该方法,在一段时间内你...

  • UIButton的防重复点击(添加分类实现)

    为了防止在一定时间内,无限制的点击按钮,可以自定义时间内防止重复点击! .h文件 #import#define d...

  • Android 防误触

    防止按钮短时间内多次点击。使用kotlin扩展方法,限制500毫秒内点击一次。 调用处

  • kotlin对Java函数式API的使用

    kotlin调用Java的时候可以用函数式API,但是有一定的限制。如果Kotlin调用java方法,并且该方法接...

  • 防止表单重复提交

    防止表单重复提交: 方法1:页面限制按钮 方法2:如图

  • iOS Debounce函数防抖

    防抖指的是一定时间内多次触发的方法只执行最后一次,防止方法被高频调用,也可以说方法在一定时间后才执行,如果在这个时...

  • 《Ruby 元编程》读书笔记三:方法

    动态方法 目的:消除重复的代码。 ①动态调用方法 调用方法时,通常使用(·),也可以使用Object#se...

  • HashSet重复元素判断

    HashSet重复元素判断: HashSet不能添加重复的元素,当调用add(Object)方法时候, 首先会调用...

  • [iOS] MessageThrottle源码分析

    这个库就是限流的那个库,他能限制一个方法的调用,在一段时间内无论你调几次都只执行一次~ 地址:https://gi...

网友评论

    本文标题: 限制一定时间内重复调用方法

    本文链接:https://www.haomeiwen.com/subject/gdnwwxtx.html