![240](https://cdn2.jianshu.io/assets/default_avatar/6-fd30f34c8641f6f32f5494df5d6b8f3c.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/240/h/240)
文章不错,干活满满,就是对 3.3 节有点小疑问,感觉应该不能在子线程上运行 DisplayLink,因为返回的 FPS 值没有意义。
我自己测试了一下,在主线程和子线程上同时开启 DisplayLink,然后对比它们的输出。当在主线程做了大量 IO 操作,我自己操作时都感觉非常卡时,主线程上的 FPS 值很低,符合预期,但子线程的基本上一直是 59。
查看了一下 ibireme 大神的经典文章 https://blog.ibireme.com/2015/11/12/smooth_user_interfaces_for_ios/,里面提到“在 VSync 信号到来后,系统图形服务会通过 CADisplayLink 等机制通知 App,App 主线程开始在 CPU 中计算显示内容……”。对比我的实验结果,感觉 CADisplayLink 可能真的“只是”一个与 VSync 对应 timer。VSync 每 16ms 触发一次,所以 CADisplayLink 的回调也每 16ms 触发一次,无论在哪个线程上。类似于 NSTimer. tolerance,若一个线程 A 很忙碌,无法及时执行 CADisplayLink 的回调,那么此次回调就被跳过,我们统计的 count 数就会变少,算出的 FPS 也变小了。同时,若另一个线程 B 不忙,就可以按时执行回调,算出的 FPS 值就会接近 60。由于我们就是要监测主线程的卡顿情况,所以只能在主线程上启动 DisplayLink。
很多开发小伙伴们经常私信问我一些问题: 1、若集成了腾讯Bugly或者友盟等等异常搜集的SDK,AvoidCrash会影响到它们的异常搜集吗?2、为什么集成了AvoidCra...
1024
「算法与数据结构」从入门到进阶吐血整理推荐书单推荐一下「算法与数据结构」从入门到进阶的书单。 一.入门系列 这些书籍通过图片、打比方等通俗易懂的方法来讲述,让你能达到懂一些基础算法,线性表,堆栈,队列,树,图,DP算法,...
去年,我在微博上发起了100天阅读博文的行动。具体就是,每天读一篇 iOS 开发相关的技术博文,并在微博上分享自己的读后感。对于在开发、工作、和面试中常见的问题,通过这段时间...
在移动开发过程中,从UI图上获取颜色是日常开发中常有的事。不过从图片获取颜色也有很多种操作方式,很多人在日常中取到的并不是“正确”的值。 上策:避免从图片中取值 最好的情况就...
每个UIView有一个伙伴称为layer,一个CALayer。UIView实际上并没有把自己画到屏幕上;它绘制本身到它的layer上,它的layer被绘制到屏幕上。正如我已经...
前言 前面发了一篇iOS 面试的文章,在说到 UIView 和 CALayer 的区别和联系的时候,被喵神指出没有切中要点,所以这里就 CALayer 和 UIView 这个...
转发自一个低调的iOS开发 简介 Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的...
GCD实现设计模式 在某个类里面实现GCD单粒设计模式 类的.h文件 类的.m文件 宏定义封装GCD单粒设计模式(1) 将实现单粒设计模式的代码放到宏定义里面,并且专门搞个....
更新于:20170814更新于:20171222再次更新于:20180823 最近的几天在看一些 Instruments 相关的知识,总结分享一下希望对大家有所帮助: 本文章...
什么是转场 转场的本质是下一场景(子 VC)的视图替换当前的场景视图(子 VC)以及相应的控制器的切换,表现为当前视图消失和下一视图出现这一过程。 常用的转场 在 UINav...