首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iOS定时器,你真的会使用吗?前言正文结语

dispatch_source_set_event_handler 这个函数在执行完之后,block 会立马执行一遍,后面隔一定时间间隔再执行一次。而 NSTimer 第一次执行是到计时器触发之后。...使用场景 ---- 介绍完iOS中的各种定时器,接下来我们来说说这几种定时器在开发中的几种用法。...一般程序进入后台时,定时器会停止,但是在定位APP中,需要持续进行定位,APP在后台时依旧可以运行,所以在后台定时器也是可以运行的。...注:关于iOS后台常驻,可以查看这篇博客 在使用GCD定时的时候发现GCD定时器也可以在后代运行,后来很多人反映GCD定时器不能在后台运行,我测试了下,确实是这样。...但是我在项目中的使用的GCD定时器确实是能在后台运行的,是因为我开启 Background Modes 中的后台持续定位,程序在后台依旧可以运行。 创建方法同上面的短信倒计时.

2.5K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    iOS_定时器:NSTimer、GCDTimer、DisplayLink

    控制+销毁: 四、对比总结 在iOS里用个 Timer(定时器)真的是太麻烦了,一不小心就不work了,一不小心又导致内存泄露了~ 反正就是得非常注意,下面就来聊聊定时器: 一、NSTimer 1....如:目前的60次/s) 控制selector触发频率的属性 iOS10之前用frameInterval,默认1 self.link.frameInterval = 2; // 30次/s 即:每次时间间隔...时,结果不可预测 (大概是频率已经大于屏幕刷新频率了, 能否及时绘制每次计算的数值得看CPU的负载情况, 此时就会出现严重的丢帧现象) iOS10之后已被弃用, 因为每次的时间间隔会根据FPS的不同而不用...回调方法: - (void)displayLink:(CADisplayLink *)link { link.duration // 最大屏幕刷新时间间隔, 在selector首次被调用后才会被赋值...如:视频播放的时候需要不停的获取下一帧的数据用于界面渲染 以上两者原理都差不多,需要依赖RunLoop,并指定Mode实现;只是频率的计算方式不同;还有就是精确度,iOS10后为了尽量避免在NSTimer

    87620

    Objective-C三种定时器CADisplayLink NSTimer GCD的使用

    (readonly, nonatomic) CFTimeInterval duration;   //屏幕刷新时间间隔, 目前iOS刷新频率是60HZ, 所以刷新时间间隔是16.7ms @property...因为当滑动时, RunLoop会进入到UITrackingRunLoopMode 所以当我们发现计时器没有运行时, 可以检查下是否有加入到正确的mode中 那我们来说一下runloop的几种mode:...(10.12), ios(10.0), watchos(3.0), tvos(10.0)); //实例化方法, 以block的方式传入要执行的内容, 需要手动添加到RunLoop中 + (NSTimer...当设置tolerance之后在允许范围内的延迟可以触发事件,超过的则不触发。默认是时间间隔的1/10 网上很多人对fire方法的解释其实并不正确。...当加入到runloop中timer不需要激活即可按照设定的时间触发事件。fire只是相当于手动让timer触发一次事件。 如果timer设置的repeat为NO,则fire之后timer立即销毁。

    2.4K31

    《Motion Design for iOS》(三十九)

    模型层表示已知的准确的CALayer预加到动画上的属性。如果你添加一个动画到layer上,然后在动画进行到一半时问模型层它的属性是什么,答案是不会反映任何动画当前的内容的。...Pop是完全不同的! Pop不使用Core Animation来执行任何它提供的动画功能。不同之处在于它设置了一个特殊的时间对象来每1/60秒执行一次。...那个每秒执行60次的代码会直接基于下一个你在弹簧动作中定义的位置更新任何你想要的属性。...这个Pop用来支撑整个框架的时间对象是CADisplayLink,它可以看做是NSTimer的一个更高级版本,NSTimer是Mac游戏开发者常年用来在他们的Mac和iOS游戏中一帧帧运行代码的。...CADisplayLink就是设计来避免这个问题的,因为它不是设置时间间隔,它一遍遍地调用你的方法的速率完全取决于屏幕的刷新频率。

    33430

    各种定时器–最全的定时器使用

    , 还可以设置其他的属性, 例如开启时间, 这些直接参考其API 进行设置即可; 注意: 以上实例中, 我没有使用全局的NSTimer 对象, 如果设置全局变量, 或者设置为属性, 在停止定时器的时候要手动置为...1s的间隔, 所以1s之后才开始执行,可以设置使用DISPATCH_TIME_NOW来立马执行; 注意: 这里的开始时间(start)可以使用下面的方式的来设置: dispatch_time_t...CADisplayLink CADisplayLink默认每秒运行60次,通过它的 frameInterval 属性改变每秒运行帧数,如设置为2,意味CADisplayLink每隔一帧运行一次,有效的逻辑每秒运行...CADisplayLink以特定模式注册到runloop后,每当屏幕显示内容刷新结束的时候,runloop就会向CADisplayLink指定的target发送一次指定的selector消息, CADisplayLink...所以通常情况下,按照iOS设备屏幕的刷新率60次/秒 延迟:iOS设备的屏幕刷新频率是固定的,CADisplayLink在正常情况下会在每次刷新结束都被调用,精确度相当高。

    2.4K30

    深入学习iOS定时器

    定时器,用来延迟或重复执行某些方法,例如:网络定时刷新,UI间隔刷新,动画效果......iOS中的定时器大致分为这几类: NSObject GCD定时器 NSTimer CADisplayLink...当其加入到 RunLoop 时,RunLoop会注册对应的时间点,当时间点到时,RunLoop会被唤醒以执行那个回调。后面要讲的NSTimer 其实就是 CFRunLoopTimerRef。...NSObject iOS框架图 在object-c中,绝大部分类的基类都是NSObject,使用NSObject延迟执行也被用于网络定时刷新,配套使用代码cancelPreviousPerformRequestsWithTarget...GCD GCD定时器其实是一种特殊的分派源,它是基于分派队列的,而NSTimer是基于运行循环的,所以,尤其是在多线程中,GCD定时器要比NSTimer好用的多。...他们之间是 toll-free bridged 的。一个 NSTimer 注册到 RunLoop 后,RunLoop 会为其重复的时间点注册好事件。

    98220

    微信收款机具在慢速网络中快速收款的技术揭秘

    : 4.5 机具HTTPS长连接 4.5.1 如何选择心跳时间间隔 机具在2G网络环境中的网络拓扑: 一般情况下,机具引起空闲连接失效的外部因素有2个: 移动网络出口NAT空闲连接超时 支付后台http...4.8 实验数据分析 在2G网络环境下,每间隔0.5秒进行一次完整的支付交互(请求BODY为300字节),发送请求与收到后台ACK的耗时在0.6秒左右: 如果间隔时间1秒以上,发送请求与收到后台ACK的耗时在...1.1秒左右: 网络交互时序: 在BODY为300节字情况下,分别对不同时间间隔做了相同实验,结合实验数据分析得知,如果bc之间的时间间隔为0.5秒,则cd之间的耗时为0.6秒左右;如果bc之间的时间间隔超过...现象总结:cd之间的耗时受ac之间的时间间隔影响,ac间隔不大于0.5秒,比ac间隔大于0.5秒,cd耗时要少0.5秒左右。...4.9.1 如何应用这个实验结果 机具扫码状态时(即4.2章节交互流程中的步骤2),以0.5秒间隔不断发送上行数据包,进行GPRS链路的预建立与保持(预热),机具扫码完成后停止发送预连接数据包,接下来的支付请求传输则可预期减少

    4.5K401

    NSRunLoop-iOS中隐藏的大杀器

    Run Loop事件源 在一个线程中我们需要做的事情并不单一,如需要处理定时钟事件,需要处理用户的触控事件,需要接受网络远端发过来的数据,将这些需要做的事情统统注 册到事件源中,每一次循环的开始便去检查这些事件源是否有需要处理的数据...timer sources:用于分发同步事件,通常这些事件发生在特定时间或者重复的时间间隔上,比如:[NSTimer scheduledTimerWithTimeInterval:target:selector...NSRunLoop就是一直在循环检测,从线程start到线程end,检测inputsource(如点击,双击等操作)同步事件,检测timesource同步事件,检测到输入源会执行处理函数,首先会产生通知...,App自己负责管理(触发),如UIEvent,CFSocket - Source1:由RunLoop和内核管理,Mach port驱动 如CFMach、CFMessage CFRunLoopObserver..., 系统会自动放入当前线程中的currentRunLoop中,并且只能在NSDefaultRunLoop模式下才能触发 NSTimer * timer1 = [NSTimer scheduledTimerWithTimeInterval

    1.1K10

    老司机带你走进Core Animation 之CADisplayLink

    不过既然苹果专门提供了这么一个类,就一定是有他的存在意义的。他的优势就在于他的执行频率是根据设备屏幕的刷新频率来计算的。换句话讲,他也是时间间隔最准确的定时器。 还是在使用中介绍吧。...frameInterval,事件触发间隔。是指两次selector触发之间间隔几次屏幕刷新,默认值为1,也就是说屏幕每刷新一次,执行一次selector,这个也可以间接用来控制动画速度。...首先,有5个方法可以为我们提供NSTimer实例。 分三类,以timer开头的两个类方法,以schedule开头的两个类方法以及以init开头的一个实例方法。...网上很多人对fire方法的解释其实并不正确。fire并不是立即激活定时器,而是立即执行一次定时器方法。当加入到runloop中timer不需要激活即可按照设定的时间触发事件。...第一个参数是我们的timer对象,第二个是timer事件首次触发的延迟时间,第三个参数是timer时间触发的时间间隔,最后一个参数是timer触发的允许延迟值。类比NSTimer的tolerance。

    1.5K20

    iOS学习——浅谈RunLoop

    1 RunLoop基础 1.1 RunLoop的基本作用 保持程序的持续运行(ios程序为什么能一直活着不会死) 处理app中的各种事件(比如触摸事件、定时器事件【NSTimer】、selector事件...如果有了Runloop,那么相当于在内部有一个死循环,能够保证程序的持续运行 main函数中的Runloop  a 在UIApplication函数内部就启动了一个Runloop 该函数返回一个int...基本上说的就是NSTimer   NSTimer在实际开发中会出现不准的情况,出现这种情况的主要是NSTimer的初始化有两种方法如下,然后第一种方法会自动添加到当前的RunLoop中,并且RunLoop...一个mode里面可以添加多个NSTimer,也就是说以后当创建NSTimer的时候,可以指定它是在什么模式下运行的。...i可以接收该值范围内的误差,通常传0 该参数的意义:可以适当的提高程序的性能 注意点:GCD定时器中的时间以纳秒为单位(面试) */ dispatch_source_set_timer

    73421

    2021年,大厂常问iOS面试题--Runloop篇

    1.Runloop 和线程的关系? 一个线程对应一个 Runloop。 主线程的默认就有了 Runloop。 子线程的 Runloop 以懒加载的形式创建。...将这个任务扔到了后台线程的 RunLoop 中。 7.PerformSelector 的实现原理?...NSTimer的精确度就显得低了点,比如NSTimer的触发时间到的时候,runloop如果在阻塞状态,触发时间就会推迟到下一个runloop周期。...并且 NSTimer新增了tolerance属性,让用户可以设置可以容忍的触发的时间的延迟范围。...,感谢你的观看,只是有些话想对读者们说说: iOS开发人群越来越少,说实在的,每次在后台看到一些读者的回应都觉得很欣慰,至少你们依然坚守iOS技术岗…为了感谢读者们,我想把我收藏的一些编程干货贡献给大家

    1.9K10

    iOS 如何监测 FPS

    CADisplayLink 实际上跟平常用的 NSTimer 的用法基本相似,NSTimer 的时间间隔是以秒为单位,而 CADisplayLink 则是使用帧率来作为时间间隔的单位。...CADisplayLink 对象时,指定方法,该方法会在每次屏幕刷新,即每 1/60 秒调用一次,通过计算方法的调用次数以及时间间隔,来获取当前屏幕的 fps 测试 根据上面的代码,我创建了一个 tableView...在这篇文章中,发现作者也遇到相同的问题:iOS中基于CADisplayLink的FPS指示器详解[1] 根据大神 ibireme 的文章iOS 保持界面流畅的技巧[2]的介绍,我们能够知道在屏幕中显示图像的过程中...然后 GPU 就切换指向到另一个帧缓冲区,重复上述工作。 由此可以得知,因为 CADisplayLink 的运行取决于 RunLoop。...参考资料 [1] iOS中基于CADisplayLink的FPS指示器详解: https://www.jianshu.com/p/86705c95c224 [2] iOS 保持界面流畅的技巧: https

    2K30

    微信团队原创分享:iOS版微信的内存监控系统技术实践

    思路是整个堆栈以链表的方式插入到table里,链表结点存放当前地址和上一个地址所在table的索引。...2.2.3 性能数据 经过上述优化,内存监控工具在iPhone6Plus运行占用CPU占用率13%不到,当然这是跟数据量有关,重度用户(如群过多、消息频繁等)可能占用率稍微偏高。...的来龙去脉》 《QQ 18年:解密8亿月活的QQ后台服务接口隔离技术》 《月活8.89亿的超级IM微信是如何进行Android端兼容测试的》 《以手机QQ为例探讨移动端IM中的“轻应用”》 《一篇文章...300KB到30MB的技术演进(PPT讲稿) [附件下载]》  《微信团队原创分享:Android版微信从300KB到30MB的技术演进》  《微信技术总监谈架构:微信之道——大道至简(演讲全文)》...》  《架构之道:3个程序员成就微信朋友圈日均10亿发布量[有视频]》  《快速裂变:见证微信强大后台架构从0到1的演进历程(一)》 《快速裂变:见证微信强大后台架构从0到1的演进历程(二)》

    2K20

    iOS_Memory Leak 内存泄露治理

    ---- 3、Analyze 静态分析入口: 分析案例: 缺陷:只能检查编译时的内存泄漏,并不能检测到所有的内存泄漏,如:发生在运行时,或需要用户操作时产生的泄露。...底部栏: snapshots,可以设置检测泄露的时间间隔,也有立即检测按钮: Input Filter可通过线程过滤 Detail Filter可通过关键字过滤 也可选择时间段过滤...:在起始时间点按下鼠标左键,拖动到截止时间点松开: 4.3.2、Cycles & Roots页面 点击中间栏的左侧切换到Cycles & Roots页面,可查看泄露图: 看图分析应该是因为block...5.2、入口: Xcode 运行项目时可点击中部栏的Debug Memory Graph按钮,查看内存图: 5.3、使用分析: 5.3.1、分析方式1: 点击左侧 导航栏 - 底部栏 的 Show...(不是引用环,但是无法释放) iOS10苹果新出了3个方法,采用block的形式实现代理方法,不需要传入self(block中还是需要用weakSelf),从而保证了self的dealloc的执行。

    91720

    iOS开发:解决App进入后台,倒计时(定时器)不能正常计时的问题

    前言 在iOS开发过程中,尤其是发送短信验证码的需求是非常常见的需求,这就涉及到倒计时的使用,但是如果正在倒计时操作,app进入后台运行,倒计时会出现什么效果呢?那么本篇博文就来了解一下相关知识吧。...项目需求: 点击操作之后倒计时开始,然后App在后台运行,倒计时不停止继续执行。短信验证码 、时间倒计时等情况都适用这个需求。...常理: iOS程序进入后台运行,10分钟之内就会被系统“杀死”,所以倒计时会停止执行。 解决思路: 方法一:根据记录开始的时间和获取当前时间进行时间差操作进行处理。...监听进入前台、进入后台的消息,在进入后台的时候存一下时间戳,停掉定时器(系统会强制停止定时器);在再进入前台时,计算时间差。若剩余的时间大于时间差,就减去时间差,否则赋值剩余时间为0。...png 2.png 3.jpeg 4.png 5.jpeg 通过以上的代码,在App进入前、后台时做一些计算和定时器操作,完成定时器在后台执行,倒计时不停止的效果。

    6.8K84

    微信团队分享:详解iOS版微信视频号直播中因帧率异常导致的功耗问题

    1、引言 功耗优化一直是 app 性能优化中让人头疼的问题,尤其是在直播这种用户观看时长特别久的场景。...3、知识储备1:iOS中的动画分类 在iOS中,大部分动画的本质就是根据输入的时间戳,返回对应属性的动画参数,从而移动图像,达到运动的效果。...中的动画渲染 iOS中的动画或者 UIView 的修改到底是怎么被渲染到屏幕上去的?...在 iOS 中 Render Server 通常指的是 backboardd 进程,backboardd 进程是一个与 SpringBoard 守护进程一起运行的守护进程。...但是在我们直播场景中,一共有如下几种场景的动画提交: 1)UIView block 动画; 2)UIScrollView scroll 动画; 3)NSTimer 动画; 4)CAAnimation。

    58400

    暗影骑士擎bios详解_runloop原理和机制

    (Sources0、Sources1)、Timer,那么就直接退出RunLoop 基本的作用就是保持程序的持续运行,处理app中的各种事件。...定时源则传递同步消息,在特定时间或者一定的时间间隔发生 NSRunLoop的实现机制,及在多线程中如何使用 - 实现机制:回答runloop的基本作用,处理逻辑,前面都有。...A 每一个线程都有其对应的RunLoop B 默认非主线程的RunLoop是没有运行的 C 在一个单独的线程中没有必要去启用RunLoop D 可以将NSTimer添加到runloop中 参考答案...对象以NSDefaultRunLoopMode(kCFRunLoopDefaultMode)添加到主运行循环中的时候, ScrollView滚动过程中会因为mode的切换,而导致NSTimer将不再被调度...上有个UILabel,显示NSTimer实现的秒表时间,手指滚动cell过程中,label是否刷新,为什么?

    68210
    领券