【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中的定时器的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中更改计时器选择器函数中的 userInfo