设为首页 加入收藏

TOP

iOS开发之UITableView中计时器的几种实现方式(NSTimer、DispatchSource、CADisplayLink)(二)
2017-10-11 14:39:02 】 浏览:10140
Tags:iOS 开发 UITableView 计时器 实现 方式 NSTimer DispatchSource CADisplayLink
议在MainQueue中做,因为在编程时尽量的把一些和主线程关联不太大的操作放到子线程中去做。代码如下所示:

  

 

接下来我们来看一下上述的代码的运行效果,从该效果中我们可以看出该定时器是可以正常工作的。

  

 

 

五、CADisplayLink

接下来我们来使用CADisplayLink来实现定时器功能,在之前的博客中我们也使用过CADisplayLink,不过是用来计算FPS的。下方代码片段中我们就使用CADisplayLink来实现的定时器。CADisplayLink可以添加到RunLoop中,RunLoop的每一次循环都会触发CADisplayLink所关联的方法。在屏幕不卡顿的情况下,每次循环的时间时1/60秒

下方代码,为了不让屏幕的卡顿等引起的主线程所对应的RunLoop阻塞所造成的定时器不精确的问题。我们开启了一个新的线程,并且将CADisplayLink对象添加到这个子线程的RunLoop中,然后在主线程中更新UI即可。具体代码如下:

  

 

我们对上述代码运行,下方是其对应的运行结果。从下方运行结果中我们不难看出,在TableView滚动时该定时器也是可以正常运行的。当然该方式实现的定时器的精度是比较高的。

  

 

经过上述五大部分,我们罗列了定时器的几种实现方式,通过对比我们不难发现其优劣性。上述定时器中DispatchSourceTime以及CADisplayLink的精度要比NSTimer的精度要高。从代码实现中我们不难看出CADisplayLink的精度是比较高的。

本篇博客所涉及代码的github分享地址为:https://github.com/lizelu/NSTimerWithRunLoop

 

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Mac 下使用svn 下一篇CATiledLayer

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目