关于iOS中延迟执行的几种方法

1、方法一:使用dispatch_after

int64_t delayInSeconds = 10.0;      // 延迟的时间
/*
 *@parameter 1,时间参照,从此刻开始计时
 *@parameter 2,延时多久,此处为秒级,还有纳秒等。10ull * NSEC_PER_MSEC
 */
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){           
     // do something
});

2、方法二:使用performSelector

/**
 *  延迟执行
 *
 *  @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.25];

补充:

取消延迟执行的方法:

第一种:

/**
 *  取消延迟执行
 *
 *  @param aTarget    一般填self
 *  @param aSelector  延迟执行的方法
 *  @param anArgument 设置延迟执行时填写的参数(必须和上面performSelector方法中的参数一样)
 */
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(nullable id)anArgument;
注意:这是一个类方法,不能用实例对象去调用,只能用NSObject。

第二种:

+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget;
// 使用:
[NSObject cancelPreviousPerformRequestsWithTarget:self];
这也是一个类方法,调用的话可以撤回全部申请延迟执行的方法。

还有两个常用的方法:

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait;
若wait是YES,则等待当前线程执行完以后,主线程才会执行aSelector方法;若wait是NO,则不等待当前线程执行完,就在主线程上执行aSelector方法。另外,如果当前线程是主线程,则立即执行aSelector方法。

- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullable id)arg waitUntilDone:(BOOL)wait NS_AVAILABLE(10_5, 2_0);
在指定线程中执行aSelector方法。

链接來源:简书作者:漂亮的男孩子

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值