在iOS中,延迟操作的执行有很多种,但是如果要取消上一次延迟并继续本次延迟呢。
场景:输入内容,停止输入后延迟1秒执行其他操作,如果期间还继续输入,则重新计时。
1. 取消延迟执行的方法:
第一种
1 | /** |
注意,这是一个类方法,不能用实例对象去调用,只能用NSObject
通过API文档查询,这个方法取消的前提是提前注册了performSelector
1 | Cancels perform requests previously registered with performSelector:withObject:afterDelay:. |
第二种:
1 | open class func cancelPreviousPerformRequests(withTarget aTarget: Any) |
这也是一个类方法,调用的话可以撤回全部申请延迟执行的方法。
2.调用延迟方法
1 | func perform(_ aSelector: Selector, with anArgument: Any?, afterDelay delay: TimeInterval) |
3.具体使用
1 | NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(QuaryWithNameString), object: nil) |
4.说明
这两个方法成对出现,参数和方法名也要对应一致。
另外延迟方法换成别的话,cancelPreviousPerformRequests
是不起作用的,本人亲测。