卡顿问题

摘要:
导致卡顿问题的几种原因:复杂UI、图文混排的绘制量过大;在主线程上做网络同步请求;在主线程做大量的IO操作;运算量过大,CPU持续高占用;死锁和主子线程抢锁。FPS是一秒显示的帧数,也就是一秒内画面变化数量。我们通过监听NSRunLoop的状态,就能够发现调用方法是否执行时间过长,从而判断出是否会出现卡顿。简单来说,RunLoop是用来监听输入源,进行调度处理的。

导致卡顿问题的几种原因:

  • 复杂 UI 、图文混排的绘制量过大;

  • 在主线程上做网络同步请求;

  • 在主线程做大量的 IO 操作;

  • 运算量过大,CPU 持续高占用;

  • 死锁和主子线程抢锁。

FPS 是一秒显示的帧数,也就是一秒内画面变化数量。当FPS达到60,说明界面很流程,当FPS低于24,页面流畅度不是那么流畅。

线程的消息 事件是依赖于 NSRunLoop 的,所以从 NSRunLoop 入手,就可以知道主线程上都调用了哪些方 法。我们通过监听 NSRunLoop 的状态,就能够发现调用方法是否执行时间过长,从而判断出是 否会出现卡顿。

RunLoop 这个对象,在 iOS 里由 CFRunLoop 实现。简单来说,RunLoop 是用来监听输入源,进 行调度处理的。这里的输入源可以是输入设备、网络、周期性或者延迟时间、异步回调。

RunLoop 会接收两种类型的输入源:

  • 一种是来自另一个线程或者来自不同应用的异步消息;

  • 另一 种是来自预订时间或者重复间隔的同步事件。

免责声明:文章转载自《卡顿问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Elasticsearch 6.2.3版本 执行聚合报错 Fielddata is disabled on text fields by defaultmaven项目的继承下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

IOS 多线程的一些总结

IOS 多线程 有三种主要方法 (1)NSThread (2)NSOperation (3)**   下面简单介绍这三个方法  1.NSThread       调用方法如下:          如函数需要输入参数,可从object传进去。     (1) [NSThread detachNewThreadSelector:@selector(th...

MORMOT通讯类说明(转 自己记录 原文版权归原作者)

MORMOT通讯类说明 MORMOT在SynCrtSock.pas单元实现通讯类。 MORMOT实现TCP/UDP/HTTP/WEBSOCKET客户端和服务端的协议的单元文件。可以看出MORMOT实现的通讯协议是很全面的。MORMOT支持跨操作系统平台(WINDOWS 和 LINUX)。MORMOT支持多种开发工具(DELPHI和LAZARUS)。但我们...

深度剖析OpenGL ES中的多线程和多窗口渲染技术

由 创新网小编 于 星期五, 2014-04-11 14:56 发表 移动设备中的CPU和GPU已经变得很强大,到处都是配备一个或多个高分辨率屏幕的设备,需要使用带有图形驱动器的复杂交互也日益增加。在这篇博客文章中,我将讨论多线程和多窗口渲染对开发人员来讲意味着什么,同时我将介绍将这些技术应用您设计当中的条件和时机。 什么是多线程渲染? 传统上,Ope...

并发系列(1)之 Thread 详解

本文主要结合 java.lang.Thread 源码,梳理 Java 线程的整体脉络; 一、线程概述 对于 Java 中的线程主要是依赖于系统的 API 实现的,这一点可以从 java.lang.Thread;源码中关键的方法都是 native 方法看出,也可以直接查看 OpenJDK 源码看出来,这一点后面还会讲到;对于 JDK1.8 而言,他的 Win...

Java中primitive type的线程安全性

Java中primite type,如char,integer,bool之类的,它们的读写操作都是atomic的,但是有几个例外: long和double类型不是atomic的,因为long和double都是8字节的,而在32位的CPU上,其机器字长为32位,操作8个字节需要多个指令操作。 ++i或者i++,因为要先读后写,也是多步操作。 这些情况下,...

ManualResetEvent 与 AutoResetEvent 的理解和使用

在多线程开发中,时常用到ManualResetEvent 与AutoResetEvent 。 它们如同道路交通中的信号灯。两者之间有什么区别呢? 共同点: 均继承EventWaitHandle 接口,因此,均具有以下功能: Reset() //红灯 Set() //绿灯 WaitOne() // 等待信号 ManualResetEvent mre = ne...