美文网首页
延迟执行方法

延迟执行方法

作者: Leon1024 | 来源:发表于2019-05-24 21:22 被阅读0次

    比如文本输入速度很快,不想每次快速的输入都执行某些操作,但如果输入停顿0.5秒的话就要执行该操作的话,可以使用以下方法

    // 每次输入的事件监听
    - (void)startSearch:(UITextField *)textField {
        NSLog(@"%s", __PRETTY_FUNCTION__);
        
        [NSObject cancelPreviousPerformRequestsWithTarget:self];
        [self performSelector:@selector(loadSearchSuggestionsWithSearchWord:) withObject:textField.text afterDelay:0.5];
    }
    
    // 需要执行的实际操作
    - (void)loadSearchSuggestionsWithSearchWord:(NSString *)searchWord {
        NSLog(@"%s", __PRETTY_FUNCTION__);
        
        // 发起网络请求,成功后刷新tableView显示数据
    }
    
    

    方法解释:

    /**
     *  延迟执行
     *
     *  @param aSelector  方法名称
     *  @param anArgument 要传递的参数,如果无参数,就设为nil
     *  @param delay      延迟的时间
     */
    - (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay{
    
    };
    
    
    // 可以这样调用
    [self performSelector:@selector(methodName) withObject:self afterDelay:0.5];
    
    
    
    /**
     *  取消延迟执行
     *
     *  @param aTarget    一般填self
     *  @param aSelector  延迟执行的方法
     *  @param anArgument 设置延迟执行时填写的参数(必须和上面performSelector方法中的参数一样)
     */
    + (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(nullable id)anArgument;
    
    // 取消目标发起的所有延迟
    + (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget;
    
    // 以上两个取消方法的使用:
    [NSObject cancelPreviousPerformRequestsWithTarget:self];
    
    

    参考:https://www.jianshu.com/p/9ec417d0bf63

    相关文章

      网友评论

          本文标题:延迟执行方法

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