iOS 延迟执行和取消延迟执行

685 阅读1分钟

延迟执行取消方法

  • (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(nullable id)anArgument;

  • (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget;

主要适用场景目前可能是防止短时间内频繁操作

举例说明

  • 如果需要被取消的方法是携带参数的,那延迟执行和取消延迟执行两个参数必须一致,取消延迟执行才会成功
- (IBAction)test:(id)sender {
 [[self class] cancelPreviousPerformRequestsWithTarget:**self** selector: @selector(delayTest:) object:sender];
  [self performSelector: @selector(delayTest:) withObject:sender afterDelay:0.5];
}
- (void)delayTest:(id)sender
{
    NSLog(@"%s", __FUNCTION__);
}
  • 如果参数不是必要需求则可以用另外一个方法取消延迟执行
- (IBAction)test:(id)sender {
    [[self class] cancelPreviousPerformRequestsWithTarget:self];
    [self performSelector: @selector(delayTest:) withObject:sender afterDelay:0.5];
}
- (void)delayTest:(id)sender
{
    NSLog(@"%s", __FUNCTION__);
}