2024年4月19日发(作者:)

iOS开发入门之后终究是要接触多线程和runloop的,本片文章就简单讲下iOS

开发中的多线程技术。

线程、进程

什么是线程、进程

有的人说进程就像是人的脑袋,线程就是脑袋上的头发(谁这么说的?打死他!)。

其实这么比方不算错,但是更简单的来说,用迅雷下载文件,迅雷这个程序就是

一个进程,下载的文件就是一个线程,同时下载三个文件就是多线程。一个进程

可以只包含一个线程去处理事务,也可以有多个线程。

多线程的优点和缺点

多线程可以大大提高软件的执行效率和资源(CPU、内存)利用率,因为CPU

只可以处理一个线程(多核CPU另说),而多线程可以让CPU同时处理多个任

务(其实CPU同一时间还是只处理一个线程,但是如果切换的够快,就可以了

认为同时处理多个任务)。但是多线程也有缺点:当线程过多,会消耗大量的

CPU资源,而且,每开一条线程也是需要耗费资源的(iOS主线程占用1M内

存空间,子线程占用512KB)。

iOS开发中的多线程

iOS程序在启动后会自动开启一个线程,称为 主线程 或者 UI线程 ,用来显示、

刷新UI界面,处理点击、滚动等事件,所以耗费时间的事件(比如网络、磁盘

操作)尽量不要放在主线程,否则会阻塞主线程造成界面卡顿。

iOS开发中的多线程实现方案有四种:

生命周

期管理

技术方案 简介 语言

技术方案 简介 语言

生命周

期管理

一套通用的多线程API,适用于

pthread UnixLinuxWindows等系统,跨平台可移C

植,使用难度大

程序员

管理

NSThread

使用更加面向对象,简单易用,可直接操作线

Objective-C 手动实

程对象

例化

旨在替代NSThread等线程技术,充分利用

设备的多核

自动管

程序员

GCD C

基于GCD(底层是GCD),比GCD多了一自动管

NSOperation Objective-C

些更简单实用的功能,使用更加面向对象 理

多线程中GCD我使用比较多,以GCD为例,多线程有两个核心概念:

1. 任务 (做什么?)

2. 队列 (存放任务,怎么做?)

任务就是你开辟多线程要来做什么?而每个线程都是要加到一个队列中去的,队

列决定任务用什么方式来执行。

线程执行任务方式分为:

1. 异步执行

2. 同步执行

同步执行只能在当前线程执行,不能开辟新的线程。而且是必须、立即执行。而

异步执行可以开辟新的线程。