IOS开发定时器

本文总结了iOS开发中常用的几种定时器实现方式,包括dispatch_after、performSelector、NSTimer、GCD定时器和CADisplayLink。详细讨论了它们的使用方法、优缺点以及注意事项,特别是对于内存管理和准确性的问题进行了深入探讨。
摘要由CSDN通过智能技术生成

写在前头

在开发过程中,总是会遇到这样的需求:循环更新、处理,延时处理等事件。在这里总结了一些常用的延时和按时更新的用法

dispatch_after

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    
    NSLog(@"执行任务");
});

注意:dispatch_after函数并不是延迟对应时间后立即执行block块中的操作,而是将任务追加到对应队列中,考虑到队列阻塞等情况,所以这个任务从加入队列到真正执行的时间是不准确的。

该方法没有办法取消,但是可以在执行block内代码时进行条件判断,然后再决定是否要执行该段代码。

performSelector

关于performSelector的相关用法,我会单独写一篇文章进行总结,这里只介绍关于延时的两个用法。

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray *)modes;
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;

performSelector:withObject:afterDelay:其实就是在内部创建了一个NSTimer,然后会添加到当前线程的Runloop中。

[self performSelector:@selector(test) withObject:nil afterDelay:4];

在需要取消 test这个方法的执行的时候调用

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(test) object:nil];

注意事项: 

  1. 在子线程中执行会不会调用test方法
  2. test方法执行的线程与调用时所处的线程一致


由于该方法需要用到线程RunLoop,那么一定要手动run,才会生效。而且

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值