iOS的几种定时器及区别

来自我的个人博客Minecode.link

在开发中我们经常用到定时器,iOS为我们提供了多种定时器,包括NSTimer、CADisplayLink、GCD、NSThread(performSelector:afterDelay:),其本质都是通过RunLoop来实现,但GCD通过其调度机制大大提高了性能。定时器的使用中容易存在一些误区,故写本文总结。

本文将介绍iOS的几种定时器、定时器的立即执行方法、内存泄露问题、不准时问题

NSTimer

iOS中最基本的定时器,在Swift中称为Timer。其通过RunLoop来实现,一般情况下较为准确,但当当前循环耗时操作较多时,会出现延迟问题。同时,也受所加入的RunLoop的RunLoopMode影响,具体可以参考RunLoop的特性。

创建

构造方法主要分为自动启动和手动启动,手动启动的构造方法需要我们在创建NSTimer后手动启动它:

/// 构造并开启(启动NSTimer本质上是将其加入RunLoop中)
// "scheduledTimer"前缀的为自动启动NSTimer的,如:
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL)repeats block:(void (^)(NSTimer *timer))block

/// 构造但不开启
// "timer"前缀的为只构造不启用的,如:
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL)repeats block:(void (^)(NSTimer *timer))block

前面说到,定时器的本质是加入到了RunLoop的Timer列表中,从而随着运行循环来实现定时器的功能。所以NSTimer除了构造,还需要加入RunLoop。关于RunLoop简单实用可以见文末。

释放

定时器的释放一定要先将其终止,而后才能销毁对象。具体原因下文会说。

- (void)invalidate;</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值