04-13 在混合开发中经常遇见 按钮响应次数过多

2020-04-13  本文已影响0人  大也

据此做了一些简易封装
1.调用方法

if ([CommonTool selectorIntervalExecution:message.name Time:1 StoreName:@"wkwebVCCommand"] == NO) {
        return;
    }

2.需要在didFinishLaunchingWithOptions 调用

    //避免可能出现的bug
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"wkwebVCCommand"];

3.方法

/**
间隔时间内不允许执行多次同任务名的方法
@param seleceorName 不允许的方法名
@param time 间隔时间
@param storeName 存储名字 (存储名字不能相同)
*/
+(BOOL)selectorIntervalExecution:(NSString *)seleceorName Time:(NSInteger)time StoreName:(NSString*)storeName;

4.实现

+ (NSTimeInterval)pleaseInsertEndTime:(NSDate *)endTime{
    NSDate* startDate = [NSDate date];
    NSTimeInterval time = [startDate timeIntervalSinceDate: endTime];
    return time;
}

+ (BOOL)selectorIntervalExecution:(NSString *)seleceorName Time:(NSInteger)time StoreName:(NSString*)storeName{
    NSArray *strArr = [[NSUserDefaults standardUserDefaults] objectForKey:storeName];
    if (strArr) {
        //相同方法1秒间隔内 不允许做2次操作
        if ([strArr[0] isEqual:seleceorName] && (([self pleaseInsertEndTime:strArr[1] ]<=time ))) {
            return NO;;
        }
        [[NSUserDefaults standardUserDefaults] setObject:@[seleceorName,[NSDate date]] forKey:storeName];
    }else{
        [[NSUserDefaults standardUserDefaults] setObject:@[seleceorName,[NSDate date]] forKey:storeName];
    }
    return YES;
}

5,说明 根据点击的方法存入 当前方法名 时间 key名
然后调用时读取 优点简单 方便
缺点 有io读取操作 移除[NSUserDefaults standardUserDefaults] 时候会被移除

上一篇 下一篇

猜你喜欢

热点阅读