iOS中的定时器

 我来答
大沈他次苹0B
2022-07-24 · TA获得超过7323个赞
知道大有可为答主
回答量:3059
采纳率:100%
帮助的人:177万
展开全部

创建方式:

需要添通过 addTimer:forMode: 加到当前线程的runloop

如果只是执行延时操作,可以用:

以上的所有方法创建的定时器,如果在子线程中运行是需要开启runloop的

影响NSTimer的原因:

计时器对象,与屏幕的刷新率同步。

iOS 设备的屏幕刷新频率是固定的,其精度相当准确,一般用于做 UI 界面的不停重绘

GCD中的 dispatch_source 常见的场景就是定时器功能, dispatch_source_t 系统级的源事件,由系统自动触发,高精度

void dispatch_source_set_timer(dispatch_source_t source,dispatch_time_t start,uint64_t interval,uint64_t leeway);

参数1:source 创建的定时器timer

参数2:DISPATCH_TIME_NOW

DISPATCH_SOURCE_TYPE_TIMER系统会使用默认时钟来进行计时,当系统休眠的时候,默认时钟是不走的,也就会导致计时器停止。

dispatch_walltime(NULL,0)可以让计时器按照真实时间间隔进行计时。

参数3:间隔时间

参数4:容错,如果设置为1秒,系统可能会在任务时间到达前1秒或后1秒执行

创建好的定时器,需要手动开启:

等到指定的时间通过异步的方式将提其提交到指定的队列中执行

dispatch_time 第一个参数:dispatch_time_t

DISPATCH_TIME_NOW: 0

DISPATCH_TIME_FOREVER: 无穷大

这里0.36代表 0.36秒之后执行任务

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式