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

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

作者: 大也 | 来源:发表于2020-04-13 09:04 被阅读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] 时候会被移除

相关文章

网友评论

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

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