【Swift】iOS中的定时器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【Swift】iOS中的定时器相关的知识,希望对你有一定的参考价值。

参考技术A

ios中我们常用的定时器有三种: Timer, CADisplayLink, DispatchSourceTimer

Timer是我们最常见的定时器,当定时器创建完(不用 scheduled 的,需要手动添加到 runloop 中)后,该定时器将在初始化时指定的 t 秒后自动触发。我们经常围绕它的俩个问题是 精度 循环引用 问题。

如果Timer是加在main runloop中,就很容易因为主线程忙于各种UI操作或者复杂的运算导致阻塞线程,从而使得NSTimer延迟执行,导致精度较低。

Timer如果想要更高点的精度,我们可以从以下几个方面考虑

我们知道Timer的调用有target-action和block俩种方式,其中target-action会导致循环引用,造成内存泄露的问题, 因为target, action,runLoop之间有强引用链导致,解决办法
1.使用block回调方式

2.使用NSProxy类作为中间对象

CADisplayLink通过和屏幕刷新相同的频率将内容显示到屏幕上。也是依赖于NSRunLoop运行,iOS设备的屏幕刷新频率是固定的,CADisplayLink在通常都会在在每次刷新结束调用,精度较高,更适合做屏幕刷新等

DispatchSourceTimer精度很高,因为是系统级别,且是不受RunLoop影响。

常见基础用法

以上是关于【Swift】iOS中的定时器的主要内容,如果未能解决你的问题,请参考以下文章

永久禁用计时器 - iOS Swift 4

swift中定时器(Timer) 的使用

在 Swift 中更改计时器选择器函数中的 userInfo

Tableview Swift 中的多个计时器

如果应用程序在后台,iOS Swift Timer 不会触发

Swift:当定时器触发时,如何阻止平移手势取消?