「这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战」
多线程在开发中的应用
什么是主线程
一个iOS程序运行后,默认会开启的一条线程,称为:主线程或UI线程
主线程作用
- 显示、刷新界面
- 处理UI事件,比如点击事件、滚动事件、拖拽事件等等
主线程使用注意
-
不要把耗时的操作放在主线程中
-
耗时的操作会卡住主线程,严重影响流畅度
如果把耗时操作放在主线程里,当用户在第5秒时点击按钮时,因为线程里的操作必须是串行的,此时的这个点击事件会排在10秒耗时操作之后,直到10秒的耗时操作结束后,才能执行按钮点击事件,这样就会造成UI卡住的现象,如下图:
如果把耗时操作放在子线程里,此刻,主线程和子线程同事进行,当用户在第5秒时点击按钮时,子线程做耗时操作,主线程响应界面操作,所以这样就不会造成UI卡住的现象,所有要把耗时操作放在子线程后台线程中,如图:
多线程的实现方案
技术方案 | 简介 | 语言 | 线程生命周期 | 使用频率 |
---|---|---|---|---|
Pthread | 一套通用的多线程API,适用于Unix、Linux、Windown等系统。 跨平台、可移植、使用难度大 | C语言 | 程序员管理 | 几乎不用 |
NSThread | 使用更加面向对象。 简单易用,可直接操作线程对象 | Object-C 语言 | 程序员管理 | 偶尔使用 |
GCD | 旨在代替NSThread等线程技术 充分利用设备的多核 | C语言 | 自动管理 | 经常使用 |
NSOperation | 基于GCD(底层是GCD),比GCD多了一些更加简单实用的功能,使用更加面向对象 | Object-C 语言 | 自动管理 | 经常使用 |