美文网首页
iOS Debounce函数防抖

iOS Debounce函数防抖

作者: 举个栗子wow | 来源:发表于2019-05-05 14:58 被阅读0次

防抖指的是一定时间内多次触发的方法只执行最后一次,防止方法被高频调用,也可以说方法在一定时间后才执行,如果在这个时间段中继续触发则重新计时。

苹果并未提供这个轮子,所以我们可以自己简单造一个。

我们这个轮子主要起一个桥接的作用,所以它的接口至少需要以下几个参数:

Target:方法调用者
Function:方法名称
UserInfo:参数

我们同时还需要一个间隔interval,标识interval内触发重新计时。

整理一下像下面这样:

/**
 函数防抖

 @param target target
 @param function 方法SEL
 @param userInfo 参数
 @param interval 防抖间隔
 */
- (void)debounceTarget:(id)target function:(SEL)function userInfo:(id)userInfo interval:(NSUInteger)interval;

在实现内部需要方法、参数之类的信息保存,选择了Dictionary:

/**
 方法
 */
@property (nonatomic,strong) NSMutableDictionary *funDic;

/**
 参数
 */
@property (nonatomic,strong) NSMutableDictionary *userinfoDic;

两个字典分别保存了方法和参数,便于取消之前的方法。

- (void)debounceTarget:(id)target function:(SEL)function userInfo:(id)userInfo interval:(NSUInteger)interval {
    
    NSString *functionStr = NSStringFromSelector(function);
    id last_userInfo = [self.userinfoDic objectForKey:functionStr];
    
    if ([self.funDic objectForKey:functionStr]) {
        //重新延迟执行
        [NSObject cancelPreviousPerformRequestsWithTarget:target selector:function object:last_userInfo];
        if (userInfo) {
            [self.userinfoDic setObject:userInfo forKey:functionStr];
        }
    } else {
        //设置延迟执行,并储存这个方法名
        if (target && functionStr) {
            [self.funDic setObject:target forKey:functionStr];
            if (userInfo) {
                [self.userinfoDic setObject:userInfo forKey:functionStr];
            }
        }
    }
    [target performSelector:function withObject:userInfo afterDelay:interval];
}

很简单的一个工具类,Git地址:https://github.com/QiuYunxiang/Debounce

相关文章

  • [JavaScript] 函数节流(throttle)和函数防抖

    js 的函数节流(throttle)和函数防抖(debounce)概述 函数防抖(debounce) 一个事件频繁...

  • javascript 函数防抖、函数节流

    函数防抖(debounce ) 函数节流

  • iOS中的Throttle(函数节流)与Debounce(函数防

    通过OC实现的两个函数 参考文章: iOS中的Throttle(函数节流)与Debounce(函数防抖)

  • 函数的防抖与节流

    函数防抖(debounce) 防抖函数 debounce 指的是某个函数在某段时间内,无论触发了多少次回调,都只执...

  • js函数防抖与函数节流

    1.函数防抖(debounce) 函数防抖,debounce。其概念其实是从机械开关和继电器的“去弹跳”(debo...

  • iOS Debounce函数防抖

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

  • 防抖与节流

    1. 防抖函数 1.1 防抖定义: 函数防抖(debounce):当持续触发事件时(例如mousemove),一定...

  • JS函数防抖

    JS 中的函数防抖 一、什么是函数防抖? 概念: 函数防抖(debounce), 就是指触发事件后,在 n 秒内函...

  • 防抖函数及其应用

    建议使用 lodash 插件里面的 debounce 函数来实现 1、防抖函数简单原理 2、防抖函数的应用

  • 函数节流与函数防抖

    函数节流与函数防抖的区别JS魔法堂:函数节流(throttle)与函数去抖(debounce)函数的防抖与节流 自...

网友评论

      本文标题:iOS Debounce函数防抖

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