IOS中常用的定时器有三种

BookSim2.0 教程 本文是yz关于BookSim2.0的个人学习经验与教程。 1.介绍 什么是BookSim2.0 BookSim2.0 是周期正确的互联网络模拟器(A Cycle-Accurate Interconnection Network Simulator),被设计用来伴随William James Dally 等人出版的的书籍 Principles and Practices of INterconnection on Networks使用。 此后其功能不断得到扩展。当前的主要版本 BookSim 2.0 支持广泛 阅读详情

iOS开发中定时器经常会用到,iOS中常用的定时器有三种,分别是NSTime,CADisplayLink和GCD。

NSTimer

方式1

    // 创建定时器

    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(test) userInfo:nil repeats:YES];


    // 停止定时器

    [timer invalidate];


方式2

    // 创建定时器

    NSTimer *timer = [NSTimer timerWithTimeInterval:2 target:self selector:@selector(test) userInfo:nil repeats:YES];

    // 将定时器添加到runloop中,否则定时器不会启动

    [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];


    // 停止定时器

    [timer invalidate];

方式1会自动将创建的定时器以默认方式添加到当前线程runloop中,而无需手动添加。但是在此种模式下,当滚动屏幕时runloop会进入另外一种模式,定时器会暂停,为了解决这种问题,可以像方式2那样把定时器添加到NSRunLoopCommonModes模式下。

方式1和方式2在设置后都会在间隔设定的时间(本例中设置为2s)后执行test方法,如果需要立即执行可以使用下面的代码。

[time fire];

CADisplayLink

    // 创建displayLink

    CADisplayLink *displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(test:)];

    // 将创建的displaylink添加到runloop中,否则定时器不会执行

    [displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];


    // 停止定时器

    [displayLink invalidate];

    displayLink = nil;

当把CADisplayLink对象add到runloop中后,selector就能被周期性调用,类似于重复的NSTimer被启动了;执行invalidate操作时,CADisplayLink对象就会从runloop中移除,selector调用也随即停止,类似于NSTimer的invalidate方法

调用时机

CADisplayLink是一个和屏幕刷新率同步的定时器类。CADisplayLink以特定模式注册到runloop后,每当屏幕显示内容刷新结束的时候,runloop就会向CADisplayLink指定的target发送一次指定的selector消息,CADisplayLink类对应的selector就会被调用一次,所以可以使用CADisplayLink做一些和屏幕操作相关的操作。

重要属性

  • frameInterval
    NSInteger类型的值,用来设置间隔多少帧调用一次selector方法,默认值是1,即每帧都调用一次。
  • duration
    readOnly的CFTimeInterval值,表示两次屏幕刷新之间的时间间隔。需要注意的是,该属性在target的selector被首次调用以后才会被赋值。selector的调用间隔时间计算方式是:调用间隔时间 = duration × frameInterval。

GCD定时器

一次性定时

 dispatch_time_t timer = dispatch_time(DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC);


 dispatch_after(timer, dispatch_get_main_queue(), ^(void){


        NSLog(@"GCD-----%@",[NSThread currentThread]);


    });


重复执行的定时器

@property (nonatomic ,strong)dispatch_source_t timer;//  注意:此处应该使用强引用 strong

{

    //0.创建队列

    dispatch_queue_t queue = dispatch_get_main_queue();

    //1.创建GCD中的定时器

    /*

     第一个参数:创建source的类型 DISPATCH_SOURCE_TYPE_TIMER:定时器

     第二个参数:0

     第三个参数:0

     第四个参数:队列

     */

    dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);


    //2.设置时间等

    /*

     第一个参数:定时器对象

     第二个参数:DISPATCH_TIME_NOW 表示从现在开始计时

     第三个参数:间隔时间 GCD里面的时间最小单位为 纳秒

     第四个参数:精准度(表示允许的误差,0表示绝对精准)

     */

    dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);


    //3.要调用的任务

    dispatch_source_set_event_handler(timer, ^{

        NSLog(@"GCD-----%@",[NSThread currentThread]);

    });


    //4.开始执行

    dispatch_resume(timer);


    //

    self.timer = timer;

}

此处注意一定要强引用定时器 ,否则定时器执行到 } 后将会被释放,无定时效果。

S32K144 LPI2C Master/Slave模式配置与多设备通信实战 本文详细介绍了NXP S32K144微控制器中LPI2C模块的主从模式配置与多设备通信实战。内容涵盖硬件连接、引脚配置、主从模式深度设置、中断/DMA应用,并通过AT24C16 EEPROM、SHT30传感器等实例,解析了多设备通信中的地址切换、时序控制及常见问题排查技巧,帮助开发者高效实现基于LPI2C的稳定通信。 阅读详情

相关推荐

CiteSpace基础操作(CNKI数据的导入分析)(一)

1 Cite Space简单介绍 2 文献导入 2.1 打开知网,选择高级检索

m0_50990607的博客 5万+

iOS中的定时器

一、NSTimer 二、CADisplayLink 三、dispatch_source_t 四、总结

chenzimin_blog 5320

SAP VC实战:用CU01和CS02搞定BOM里的‘智能’对象相关性(附语法避坑指南)

在工业制造领域,产品配置的复杂性往往超出想象。想象一下,当客户需要定制一台工业设备时,可能有数百种配置选项相互影响——从基础材质到动力系统,从控制模块到安全装置。如何在SAP系统中优雅地管理这种复杂性?对象相关性(Object Dependencies)就是解决这一挑战的利器。

weixin_42524824的博客 467

iOS 定时器使用(Timer 和 CGD)

在程序开发中,我们常常借助定时器完成定时任务,比如短信验证码倒计时、运动计时等具有时间序列概念的操作。 最常用的定时方式有Timer 和GCD dispatchTimer Timer的使用 Timer 官方文档 Timer/NSTimer: 在某个时间间隔之后触发的定时器,向目标对象发送指定的消息。 Timer 的完成往往配合runloop和相应的 mode。 初始化 创建即添加到当前 runloop 通过带 scheduledxxx方法初始化的定时器,创建就会添加到当前 runloop ,且以 defau

小桥流水哗啦啦,iOS Coder 哒哒哒 4092

ISO26262 功能安全各个阶段测试要求

1. 开发过程说明 系统层面:包括软硬件集成测试、系统集成测试以及整车测试。 硬件层面:包括硬件集成与测试。 软件层面:单元测试、集成测试。 2. 功能安全总体要求 2.1 各项指标 2.2 诊断覆盖度举例 针对一个信号举例说明: 3. 功能安全测试要求 3.1 测试计划 核心内容应包括, 测试对象:需要测试的对象描述,以及测试的范围描...

AgingMoon的博客 1万+

Comsol超声空化气泡仿真:从基础理论到工业应用实践

本文详细介绍了Comsol超声空化气泡仿真的基础理论及工业应用实践。通过解析超声空化现象、Comsol模型搭建流程及求解器优化技巧,帮助工程师掌握气泡仿真技术,提升超声波清洗和乳液制备等工业应用的效率与质量。

weixin_27966471的博客 252

iOS_定时器:NSTimer、GCDTimer、DisplayLink

在iOS里用个Timer(定时器)真的是太麻烦了,一不小心就不work了,一不小心又导致内存泄露了~ 反正就是得非常注意,下面就来聊聊计时器: Timer工作原理 首先我们得了解Timer是怎么工作的: 首先它需要加到RunLoop中,RunLoop会在固定时间触发Timer的回调。这个Timer是被存放在RunLoop的Model的_timers数组里,是强引用的。(之前的文章有介绍RunLoop的结构) 因此我们需要在持有Timer的对象(如:ViewController,本文就以ViewControl

mikimo的博客 4079

【实战】基于 Inner-IoU 的 YOLOv8 优化指南:显著提升检测精度

Inner-IoU 凭借辅助边框的创新设计,成功解决了传统 IoU 损失在小目标、遮挡场景下的收敛难题,为 YOLOv8 注入了更强的定位能力。从原理剖析到代码集成,本教程已为你铺就了一条“精度提升”的实战路径。现在,不妨亲自上手尝试,让你的目标检测模型在各类数据集上都能交出一份“精度优异”的答卷——相信我,当你看到检测框精准贴合目标的那一刻,你会明白这份尝试的价值。

m0_64661770的博客 107

iOS NSTimer定时器

iOS中定时器有三种,分别是NSTimer、CADisplayLink、dispatch_source,下面就分别对这三种计时器进行说明。 一、NSTimer NSTimer这种定时器用的比较多,但是特别需要注意释放问题,如果处理不好很容易引起循环引用问题,造成内存泄漏。 1.1 NSTimer的创建 NSTimer有两种创建方法。 方法一: 这种方法虽然创建了NSTimer,但是定时器却没有起作用。这种方式创建的NSTimer,需要加入到NSRunLoop中,有NSRunLoop的驱动才会让定时器跑起来。

长沙火山 3501

LangGraph教程8:LangGraph流式处理

流式处理可显著提升基于LLM应用的响应性。LangGraph支持两种流式模式:values模式返回每一步的完整结果,适合需要完整上下文处理的场景;updates模式仅返回增量变化,适用于实时更新需求。示例代码展示了如何用create_react_agent实现这两种模式,其中values模式完整记录处理流程,updates模式逐步输出结果。通过异步迭代输出流,开发者可以灵活选择适合应用场景的流式处理方式。

Cachel Wood的博客 620

微信电脑版本不会自动下载图片吗?——没有找到解决方法。——只会默认下载doc等文件,图片不行,需要自己另存为——有什么办法解决吗?

微信电脑版本不会自动下载图片吗?——没有找到解决方法。——只会默认下载doc等文件,图片不行,需要自己另存为——有什么办法解决吗?此外,用户还可以选择将接收到的图片、视频和文件保存到指定的文件夹中。‌用户可以在微信设置中调整这一设置。

qq_15963745的博客 5088

iOS中的3种定时器

Timer是一个简单的定时器,基于RunLoop的,通常用于实现对实时性要求不高的场合,因为它被注册在runloop的timers事件源集合中,如果当前runloop执行耗时任务超过了调用时间,那么就会丢弃当前次,直接执行下一次。导致定时器不准时的情况。然后通过schedule(deadline: .now(), repeating: .seconds(1))方法指定定时器的初始延迟时间和重复时间间隔,优点为:Dispatch定时器非常轻量级,基于GCD的实现,可以利用GCD的优势来进行任务调度,性能高。

Gefangenes的博客 769

Linux安装MinIO(图文解说详细版)

最近开个新坑,就是在linux环境中操作开发环境,带大家玩转Linux,会整理出一篇Linux的专栏,欢迎大家订阅!! 富贵同学linux环境为CentOS7.8 版本。 上期跟大家说了一下OpenJDK的安装,这次说一下minio的安装 第一步,进入/opt 目录,创建minio文件夹 cd /opt mkdir minio 第二步,wget下载安装包: wget https://dl.minio.io/server/minio/release/linux-amd64/minio 第三步,进入m

编码人生 5万+

ios定时器轮训_IOS中常用的三种定时器

ios中常用的定时器有三种,分别是NSTime,CADisplayLink和GCD。NSTime方式一// 创建定时器NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(test) userInfo:nil repeats:YES];// 停止定时器[timer inva...

weixin_39725650的博客 136

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

iOS中的三大定时器 iOS开发中定时器经常会用到,iOS中常用的定时器有三种,分别是NSTime,CADisplayLink和GCD。

iOS中的三大定时器 iOS开发中定时器经常会用到,iOS中常用的定时器有三种,分别是NSTime,CADisplayLink和GCD。 NSTimer 方式1 // 创建定时器 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(te

wakice的博客 1770

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ios xcode 定时器_GitHub - ZhenKaiJia/Timer: iOS常用计时器包括NSTimer、CADisplayLink、GCD定时器。主要介绍三种定时器的使用,以及全局定时器...

一、介绍iOS常用计时器包括NSTimer、CADisplayLink、GCD定时器。本次主要介绍三种定时器的使用,以及全局定时器的封装。过程主要涉及知识点定时器、多线程、锁、消息转发。二、使用1、Timer第一种 这种会导致循环引用,因为self强引用timer,timer强引用target,会导致定时器释放失败。self.timer = Timer.scheduledTimer(timeInt...

weixin_39936310的博客 504

iOS 中几种常用的定时器

iOS 中几种常用的定时器

huangyongf的博客 1539

iOS定时器的使用

iOS开发中定时器经常会用到,iOS中常用的定时器有三种,分别是NSTime,CADisplayLink和GCD。 NSTimer 方式1 // 创建定时器 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(test) userIn...

diancannei3748的博客 155

ios xcode 定时器_iOS 中的几种常用定时器

在软件开发过程中,常常会遇到在某个时间或按照某个周期来执行一些任务,在这个时候,就会用到定时器。这里总结了 iOS 开发中经常会用到的几种定时器方法,如有不足,欢迎指正。一、NSTimer在 NSTimer 中有以下两种方法可以实现定时器:/**TimerInterval : 执行之前等待的时间。比如设置成 2.0,就代表 2 秒后执行方法target : 需要执行方法的对象selector : ...

weixin_39640265的博客 438

iOS的几种定时器及区别

来自我的个人博客Minecode.link在开发中我们经常用到定时器,iOS为我们提供了多种定时器,包括NSTimer、CADisplayLink、GCD、NSThread(performSelector:afterDelay:),其本质都是通过RunLoop来实现,但GCD通过其调度机制大大提高了性能。定时器的使用中容易存在一些误区,故写本文总结。本文将介绍iOS的几种定时器、定时器的立即执行方法

Minecode的博客 1889

iOS的几种定时器

在开发中我们经常用到定时器,iOS为我们提供了多种定时器,包括NSTimer、CADisplayLink、GCD。 NSTimer iOS中最基本的定时器,其通过RunLoop来实现,一般情况下较为准确,但当前循环耗时操作较多时,会出现延迟问题。同时,也受所加入的RunLoop的RunLoopMode影响,如果因为创建的NSTimer默认是被加入到了defaultMode,比如在一个视图里...

小菜媛的博客 3375

iOS三种定时器

在软件开发过程中,我们有时需要程序重复的执行某件事情,或者延迟时间去做事情,这时候我们就需要用到定时器,在iOS中,有三种常用的定时器,NSTimer, CADisplayLink, GCD dispatch_timer_t, 下面就几种定时器的常见用法进行介绍~NSTimer 几种常见使用方法 NSTimer *timer = [NSTimer scheduledTimerWithTimeInte

jamy08的专栏 511

[iOS]各种定时器--最全的定时器使用

说到定时器, 我们使用最多的就是NSTimer 和 GCD 了, 还有另外一个高级的定时器 CADisplayLink;一. NSTimerNSTimer的初始化方法有以下几种: 会自动启动, 并加入* MainRunloop* 的* NSDefaultRunLoopMode* 中, 注意: 这里的自动启动, 并不是马上就会启动, 而是会延迟大概一个interval的时间: + (NSTime

流火緋瞳的博客 6523

iOS中的三大定时器

iOS开发中定时器经常会用到,iOS中常用的定时器有三种,分别是NSTime,CADisplayLink和GCD。1.NSTimer方式1// 创建定时器 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(test) userInfo:nil repeats:YES];/

土豆萝卜的博客 356

iOS定时器

一、NSTimer //创建方式1 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(action:) userInfo:nil repeats:NO]; [timer invalidate]; //调用创建方法后,target对象的计数器会加1,直到执行完

甜吖~的博客 486

iOS中几种定时器

此处列举三种方法:NSTimer、CADisplayLink、GCD。 一、NSTimer (1)创建 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(action:) userInfo:nil repeats:NO]; //TimerInterv...

as407017377的博客 217
上一篇: 解决创建XIB 与UIView关联
下一篇: UIAlertController
SpringJustin
博客等级 码龄11年 2粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值