IOS开发之——多线程-基础(1)

2023-05-16

一 概述

  • 进程和线程
  • 多线程在IOS开发中的应用
  • 耗时操作的执行

二 进程和线程

2.1 什么是进程

  • 进程是指在系统中正在运行的一个应用程序
  • 比如同时打开QQ、Xcode,系统就会分别启动2个进程
  • 通过“活动监视器”可以查看Mac系统中所开启的进程

2.2 什么是线程

  • 一个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程)
  • 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行
  • 比如使用酷狗播放音乐、使用迅雷下载电影,都需要在线程中执行

2.3 线程的串行

  • 一个线程中任务的执行是串行
  • 如果要在1个线程中执行多个任务,那么只能一个一个地按顺序执行这些任务
  • 也就是说,在同一时间内,1个线程只能执行1个任务
  • 比如在一个线程中下载3个文件(分别是文件A、文件B、文件C),串行下载
  • 因此,也可以认为线程是进程中的1条执行路径

2.4 什么是多线程

  • 一个进程中可以开启多条线程,每条线程可以并行(同时)执行不同的任务
  • 进程——>车间,线程——>车间工人
  • 比如同时开启3条线程分别下载3个文件(分别是文件A、文件B、文件C),文件并行下载

2.5 多线程的原理

  • 同一时间,CPU只能处理1条线程,只有1条线程工作(执行)
  • 多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换)
  • 如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象
  • 思考:如果多线程非常非常多,会发生什么情况?
    • CPU会在N多线程之间调度,CPU会累死,消耗大量的CPU资源
    • 每条线程被调度执行的频次会降低(线程的执行效率降低)

2.6 多线程的优缺点

多线程的有点

  • 能适当提高程序的执行效率
  • 能适当提高资源利用率(CPU、内存利用率)

多线程的缺点

  • 开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能
  • 线程越多,CPU在调度线程上的开销就越大
  • 程序设计更加复杂:比如线程之间的通信、多线程的数据共享

三 多线程在IOS开发中的应用

3.1 什么是主线程

一个IOS程序运行后,默认会开启1条线程,称为“主线程”或“UI线程“

3.2 主线程的主要作用

  • 显示、刷新UI界面
  • 处理UI事件(比如点击事件、滚动事件、拖拽事件等)

3.3 主线程的使用注意

  • 别讲比较耗时的操作放在主线程中
  • 耗时操作会卡住主线程,严重影响UI的流程度,给用户一种“卡”的坏体验

四 耗时操作的执行(耗时操作在主线程)

4.1 代码(点击时输出Log文件)

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    NSLog(@"当前线程未:%@",[NSThread currentThread]);
    for (int i=0;i<10000;i++) {
        NSLog(@"-----%d",i);
    }
}

4.2 现象

4.3 过程说明

4.4 应该执行的操作(将耗时操作放在子线程(后台线程、非主线程))

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IOS开发之——多线程-基础(1) 的相关文章

  • C语言结构体,文件操作练习

    三位同学 xff0c 每位同学有三门功课成绩Chinese xff0c Math xff0c English xff0c 计算出平均成绩 xff0c 并将计算得到的数据保存到桌面C Users Administrator Desktop s
  • 最新版本sublime text3注册码(亲测可用)

    1 打开sublime text3 xff0c 点击help 2 把以下代码输入注册框 xff08 全部复制 xff09 BEGIN LICENSE TwitterInc 200 User License EA7E 890007 1D77F
  • 在Windows下配置gsl1.8科学计算库

    文章目录 一 准备工作1 下载gsl2 安装gsl3 安装Virtual Studio 二 开始配置1 lib格式的转化 这一步嫌麻烦的同学可以直接下载博主转化好的文件 2 在VS中的配置 一 准备工作 1 下载gsl 以gsl1 8为例
  • 阿里云服务器创建用户

    问题是什么 xff1f 阿里云服务器有两个地方可以创建用户 xff0c 作用是一样的吗 xff1f 当然不是 对比分析 第一种 xff1a 通过 控制台 创建用户 作用 xff1a 创建 控制台 登录子用户 方法如下 xff1a 第一步 x
  • Latex幻灯片ppt的beamer中,如何在每章节前自动显示当前所处目录位置

    Latex幻灯片ppt的beamer中 xff0c 如何在每章节前自动显示当前所处目录位置 看了其他文章 xff0c 是手动在每章前设置帧 本文提供一段代码 xff0c 使得自动在每章节前显示当前所处目录位置 如果只需要在新的一节 xff0
  • Latex中如何引用本文的section章节的序号、页码或名称?

    Latex中如何引用本文的section章节的页码 xff1f 用Latex写文章时 xff0c 需要引用自己文章中的某一节 xff0c 但是如果手动加入某章节的序号 页数或名称 xff0c 如果后续修改文章 xff0c 序号 页数或名称可
  • 零刻EQ12系列迷你主机英特尔N100首发 搭配DDR5内存双2.5G网口

    零刻EQ产品线定位低功耗和环保 xff0c 主打轻办公 影音播放等应用场景 今年的EQ12系列相比去年的EQ59 xff0c 除了升级处理器之外 xff0c 设计和配置了也带来了全方位的提升 机身将提供蓝 卡其灰 高级灰 白四种颜色可选 x
  • Real-Time Video Super-Resolution with Spatio-Temporal Networks and Motion Compensation论文解析(视频超分)

    Real Time Video Super Resolution with Spatio Temporal Networks and Motion Compensation论文解析 xff08 视频超分 xff09 论文可以直接必应搜索下载
  • 直接选择排序——C语言实现

    上期我们讲了堆排序 xff0c 堆排序是选择排序的一种 xff0c 本期我们讲述一下直接选择排序 xff0c 按道理应该是先讲直接选择排序的 直接选择排序效率极低 xff0c 只是了解一下 xff0c 实际不推荐使用 x1f525 x1f5
  • 如何使用Sublime Text3搭建C语言开发环境

    文章目录 前言一 Sublime Text3的优点二 下载安装Sublime Text31 下载2 创建快捷方式 三 设置中文界面1 步骤一2 步骤二3 步骤三 四 搭建C语言开发环境1 步骤一2 步骤二3 步骤三4 步骤四 五 参考资料
  • win11系统连接上WiFi却无法上网怎么解决?

    问题描述 xff1a 昨天更新了一下电脑系统 xff0c 从win10家庭版更新到win11家庭版本 xff0c 当天用的还是好好的 xff0c 但是一夜之间 xff0c 第二天打开电脑只能链接WiFi xff0c 但是不能上网 xff0c
  • Manjaro安装配置指南

    由于可能会有偶尔重装系统的需要 xff0c 而每次配置都丢三落四 xff0c 浪费时间 xff0c 因此整理了自己需要的配置 xff0c 一直会继续更新的 1 安装 分区时选择手动分区 挂载点大小 boot efi500M boot1G 剩
  • [@vue/compiler-sfc]`xxx` is a compiler macro and no longer needs to be imported.

    Vue 3 项目问题记录 xff1a 64 vue compiler sfc 96 defineProps 96 is a compiler macro and no longer needs to be imported 64 vue c
  • 61.Python之位运算

    二进制 xff1a 通常我们说的整数是十进制 xff0c 由0123456789组成二进制的数则是由01组成 比如将整数123转换成二进制的 123除以2 xff0c 等于61余1 61除以2 xff0c 等于30余1 30除以2 xff0
  • Debian双系统安装中的问题

    在给自己的暗影精灵5安装Debian双系统的过程中 xff0c 坎坷不断 xff08 使用的是集成了linuxcnc2 7 14的debian10安装镜像 xff09 首先是电脑不读启动盘 xff0c 最后是通过bios进入传统模式解决的
  • 字母交换

    题目描述 编码题 字符串S由小写字母构成 xff0c 长度为n 定义一种操作 xff0c 每次都可以挑选字符串中任意的两个相邻字母进行交换 询问在至多交换m次之后 xff0c 字符串中最多有多少个连续的位置上的字母相同 xff1f 输入描述
  • WIN10和Ubuntu共享蓝牙连接配对

    WIN10和Ubuntu共享蓝牙连接配对 基本想法对于蓝牙3 0设备对于蓝牙4 0设备流程0 UBUNTU下配对蓝牙设备1 查看Windows10下的牙蓝信息2 修改UBUNTU下蓝牙信息 xff1a 基本想法 蓝牙设备需要与系统做好连接
  • NAS入门之——Mac系统My Cloud EX2 Ultra设置时间机器

    一 使用时间机器的目的 您可以使用 Mac 的内建备份功能 时间机器 对您的所有文件进行自动备份 xff0c 包括应用 音乐 照片 电子邮件 文稿和系统文件 如果您拥有备份 xff0c 当原始文件从 Mac 永久性删除或者 Mac 中的硬盘
  • powermock框架(建议不用,mockito已经支持mock静态方法 )

    powermock框架 一 为什么要用powermock xff1f 二 powermock的使用1 maven依赖2 springboot基础配置 xff08 测试基类 xff09 3 mock对象1 xff09 64 Mock和 64
  • linux搭建nexus私服仓库并简单使用

    linux搭建nexus私服仓库并简单使用 1 linux搭建nexus私服仓库1 1 下载安装包1 2 linux安装1 3 修改端口号1 4 启动和关闭1 5 登录控制台1 6 账号与密码 2 创建自己的私服仓库3 上传 jar 包4

随机推荐

  • “当前不会命中断点。还没有为该文档加载任何符号“解决方案

    最近在调试公司已开发好的项目时遇到一个无法命中断点的问题 试过了网上的许多方法 依旧无法解决 后来问了公司另外一位同事 在他的帮助下才得以解决 解决方法如下 1 检查是否在Debug下 然后是否为Any CPU 2 找到解决方案所在的文件夹
  • python 小知识点

    1 获取当前文件路径 now file path 61 os path dirname file 2 对列表删除重复元素 xff0c 且不改变原有顺序 list 61 sorted set list data key 61 list dat
  • c语言,判断程序输出题。printf(“%d#%d#%d#%d#“,x,*y,z,w);printf(“%d#%d#%d#%d#“,x,y,z,w);

    以下代码段的输出是 xff1a int x y z w void p int y int x static int w y 43 43 x 43 43 w 61 x 43 y printf 34 d d d d 34 x y z w int
  • 【题解】洛谷U32670[NOIP2018原创模拟赛DAY1T1]小凯的数字 数学知识

    题目链接 题目背景 NOIP2018 原创模拟题T1 NOIP DAY1 T1 or DAY 2 T1 难度 是否发现与NOIP2017 DAY1 T1 有异曲同工之妙 说明 xff1a 10 bug已修复 题目描述 小凯有一天突发奇想 x
  • 关于C++char和string类型

    今日机试上海软通动力 xff08 华为外包 xff09 xff0c 在遇到几个字符串类型的题目发现自己对概念模糊不清 C 43 43 中char是字符类型 xff0c 是一种基本数据类型 xff0c 而string是一个模板类 xff0c
  • 结构体数组元素冒泡排序

    将结构体数组元素按年龄排序 include lt iostream gt using namespace std include lt string gt struct hero string name int age string sex
  • Ubuntu配置中文输入法

    1 找到设置 2 选择区域和语言 3 点击Manage Installed Languagees 提示安装的话安装即可 4 点击图示内容 5 将Chinese xff08 simplified xff09 勾选上 右键点击住 xff0c 将
  • Python二分查找的左闭右闭和左闭右开

    bisect 前言源码对比补充 前言 话说刷题刷到一个简单二分查找的题 xff0c 根据我的肌肉记忆马上写出了下面的代码也AC了 span class token keyword class span span class token cl
  • IOS开发之——XIB自定义视图(33)

    一 概述 IOS可以通过XIB进行自定义视图 xff0c 同Storyboard视图相比 xff1a Storyboard xff1a 重量级 xff0c 能够描述一个应用程序所有的界面 XIB xff1a 轻量级 xff0c 在Xcode
  • 错误 1 error MSB8020: The build tools for v140 (Platform Toolset = 'v140') c ————解决方案

    1 问题描述 xff1a 如题 xff1a 2 问题分析 xff1a 造成该问题的原因是所用VS版本平台集不一致导致 xff0c 更改为本机所用VS平台版本集即可 3 解决方案 xff1a 将 34 项目 属性 配置属性 常规 平台工具集
  • 双系统Ubuntu 18.04安装时卡死

    今天准备用U盘在电脑上装一个Ubuntu的系统 xff0c 当进行安装时 xff0c 发现不是在选择语言的界面就是在logo界面卡死 综合了好多网上的资料 xff0c 最终解决了 安装时卡死 xff0c 是因为Ubuntu自带一个名为nou
  • Mybatis-PageHelper自定义查询COUNT

    使Mybatis PageHelper用分页插件 xff0c 可写自定义查询COUNT的SQL语句 xff0c 在列表查询的id后面加上后缀 COUNT xff0c 如下 xff1a lt select id 61 34 selectLef
  • Android 接入穿山甲广告

    下载SDK 首先去穿山甲官网注册账号以及创建应用点此进入官网 点击进入平台 我的是创建完账号并且登录之后是这个样子 进来之后是如下界面 然后依次点击流量 gt 应用会进入到以下界面 然后点击创建应用根据提示走即可 创建完毕之后去依次点击流量
  • Shell | TelePort 堡垒机主服务检测脚本

    根据近期对堡垒机的使用 xff0c 发现 TelePort 比较简单好用 但是在使用过程中 xff0c 发现主服务容易休眠 xff0c 为解决此问题 xff0c 写了个 shell 脚本 xff0c 能够从侧面解决该问题 具体报错 远程连接
  • Ubuntu22.04设置独显用于深度学习运算,核显用于屏幕显示

    目录 摘要主板bios设置第一步 xff1a 切换prime select第二步 xff1a 关机重启 xff0c 并将显示器接口插到主板上第三步 xff1a 设置PRIME Profiles为NVIDIA On Demand模式注意事项参
  • conda新建环境时报错NotWritableError: The current user does not have write permissions

    目录 1 问题描述 2 问题原因 3 解决方案 4 测试 5 参考自 1 问题描述 在使用 conda create n environment name 命令新建环境时 xff0c 遇到错误 xff1a Solving environme
  • C++快读快写详解

    文章目录 完整的读写模板 xff08 新式 xff09 基本快读快写 xff08 旧式 xff09 更快的快读代码解释 完整的读写模板 xff08 新式 xff09 span class token macro property span
  • Anaconda 使用以及cmd命令

    在使用anaconda进行配置环境的时候 xff0c 可以再anaconda中进行环境配置 xff0c 同时也可以使用cmd利用pip或者conda在cmd命令下安装 Ubuntu指令集合 xff09 查看install清单 1 conda
  • 记录ubuntu22.04突然连不上网

    问题 xff1a ubuntu22 04莫名其妙连不上网 xff0c 右上角那个网络图标也没有 折腾了一天之后终于能连网了 因为虚拟机里装了conda环境 xff0c 装了一个机器学习框架要用的各种包 xff0c 实在不想再装一次虚拟机和环
  • IOS开发之——多线程-基础(1)

    一 概述 进程和线程多线程在IOS开发中的应用耗时操作的执行 二 进程和线程 2 1 什么是进程 进程是指在系统中正在运行的一个应用程序比如同时打开QQ Xcode xff0c 系统就会分别启动2个进程通过 活动监视器 可以查看Mac系统中