Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >多线程在iOS开发中的应用

多线程在iOS开发中的应用

作者头像
公众号iOS逆向
发布于 2021-08-25 09:09:53
发布于 2021-08-25 09:09:53
1.6K0
举报
文章被收录于专栏:iOS逆向与安全iOS逆向与安全

前言

线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。

本文重点

  • NSThread

  1. 多线程基础、pthread、开启线程的3种方式
  2. 线程的状态、线程安全问题、线程间的通信
  • GCD

  1. 同步方法和异步方法、队列的使用、线程间的通信
  2. 延迟执行、一次性代码、队列组、单例模式-ARC、单例模式-MRC、用宏抽取单例模式
  • NSOperation

  1. NSOperation和NSOperationQueue的概念理解、NSInvocationOperation、NSBlockOperation
  2. NSOperationQueue的常见方法、最大并发数、操作依赖、队列的取消\暂停\恢复

一、概念

1、进程:系统中正在运行的一个应用程序 2、线程:1个进程想要执行任务,必须得有线程。即线程是进程的基本执行单元

1)线程的串行:一个线程中任务的执行是串行的 2)多线程的原理:同一时间,CPU只能处理一条线程。多线程并发执行,其实就是CPU快速地在多条线程之间调度(如果CPU调度的时间足够快,就造成了多线程并发执行的假象)

二、多线程在iOS开发中的应用

1、什么是主线程:一个iOS程序运行之后,默认会开启一条线程,称为“主线程”,或者“UI线程” 2、主线程的主要作用:

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

2.1 主线程的使用注意事项:

别将比较耗时的操作放到主线程中

一般的解决方案就是将那些耗时的操作放到另外一个线程中去执行,多线程编程是防止主线程堵塞,增加运行效率的最佳方法。

2.2 iOS中多线程的实现方案

公众号:iOS逆向

iOS支持多个层次的多线程编程,层次越高的抽象程度越高,使用也越方便,也是苹果最推荐使用的方法。

根据抽象层次从低到高依次列出iOS所支持的多线程编程方法:

  • Thread :是三种方法里面相对轻量级的,但需要管理线程的生命周期、同步、加锁问题,这会导致一定的性能开销
  • Cocoa Operations:是基于OC实现的,NSOperation以面向对象的方式封装了需要执行的操作,不必关心线程管理、同步等问题。NSOperation是一个抽象基类,iOS提供了两种默认实现:NSInvocationOperation和NSBlockOperation,当然也可以自定义NSOperation.
  • Grand Central Dispatch(简称GCD,iOS4开始支持):提供了一些新特性、运行库来支持多核并行编程,它的关注点更高:如何在多个cpu上提升效率

2.4 线程状态

公众号:iOS逆向

see also

进程间的实时通讯方案:local socket(解决扩展和容器应用的实时通讯问题)

https://blog.csdn.net/z929118967/article/details/109616038

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 iOS逆向 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
iOS-多线程详解
欢迎大家指出文章中需要改正或者需要补充的地方,我会及时更新,非常感谢。 一. 多线程基础 1. 进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 2.线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程,称为主线程) 一个进程(程序)的所有任务都在线程中执行 3. 进程和线程的比较 1.线程是CPU调用(执行任务)的最小单位。 2.进程是CPU分配资源的最小单位。 3.一个进程中至少要有一个线程。 4
xx_Cc
2018/05/10
2.3K0
iOS多线程:『NSOperation、NSOperationQueue』详尽总结
本文首发于我的个人博客:『不羁阁』 文章链接:传送门 本文更新时间:2018年03月06日17:27:55 笔者对之前写的原文重新整理,修改了部分内容,又增加了许多关于 NSOperation、NSOperationQueue 的知识及用法,希望大家喜欢。 本文用来介绍 iOS 多线程中 NSOperation、NSOperationQueue 的相关知识以及使用方法。 通过本文,您将了解到: NSOperation、NSOperationQueue 简介、操作和操作队列、使用步骤和基本使用
程序员充电站
2018/05/31
1K0
iOS 多线程 - NSOperation
一、简介 NSOperation 的作用 NSOperation 是对 GCD 的一层封装,更加面向对象。 配合使用 NSOperation 和 NSOperationQueue 也能实现多线程编程。 NSOperation 和 NSOperationQueue 实现多线程的具体步骤 先将需要执行的操作封装到一个 NSOpertion 对象中 然后将 NSOperation 对象添加到 NSOperationQueue 中 系统会自动将 NSOperationQueue 中的 NSOperation 取出
hrscy
2018/08/30
4400
iOS 多线程 - NSOperation
iOS--多线程之NSOperation
NSOperation 一、NSOperation简单介绍 1、NSOperation简介 ①.简单说明 NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperationQueue实现多线程的具体步骤: (1)先将需要执行的操作封装到一个NSOperation对象中 (2)然后将NSOperation对象添加到NSOperationQueue中 (3)系统会⾃动将NSOperationQueue中的
用户1941540
2018/05/11
9830
iOS多线程NSThread,NSOperation和GCD详解
http://blog.csdn.net/shenjie12345678/article/details/51819493
HelloWorld杰少
2022/08/03
8870
iOS多线程NSThread,NSOperation和GCD详解
iOS学习——(转)多线程
转载自:iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用
mukekeheart
2018/08/01
1.3K0
iOS学习——(转)多线程
iOS - 多线程(四):NSOperation
NSOperation 需要和 NSOperationQueue 配合使用来实现多线程方案。单独使用 NSOperation 的话, 它是属于同步操作, 并不具备开启新线程的能力。
师大小海腾
2020/04/16
1.8K0
iOS - 多线程(四):NSOperation
推荐:多线程的实现方式及经典示例
iOS中实现多线程的技术方案 pthread 实现多线程操作 代码实现: void * run(void *param) { for (NSInteger i = 0; i < 1000; i
春哥大魔王
2018/04/16
1.2K0
推荐:多线程的实现方式及经典示例
iOS多线程——你要知道的NSOperation都在这里你要知道的iOS多线程NSThread、GCD、NSOperation、RunLoop都在这里
你要知道的iOS多线程NSThread、GCD、NSOperation、RunLoop都在这里 转载请注明出处 https://cloud.tencent.com/developer/user/1605429 本系列文章主要讲解iOS中多线程的使用,包括:NSThread、GCD、NSOperation以及RunLoop的使用方法详解,本系列文章不涉及基础的线程/进程、同步/异步、阻塞/非阻塞、串行/并行,这些基础概念,有不明白的读者还请自行查阅。本系列文章将分以下几篇文章进行讲解,读者可按需查阅。 iOS
WWWWDotPNG
2018/04/10
1.7K0
iOS多线程——你要知道的NSOperation都在这里你要知道的iOS多线程NSThread、GCD、NSOperation、RunLoop都在这里
iOS多线程编程之二——NSOperation与NSOperationQueue
NSOperation是基于Object-C封装的一套管理与执行线程操作的类。这个类是一个抽象类,通常情况下,我们会使用NSInvocationOperation和NSBlockOperation这两个子类进行多线程的开发,当然我们也可以写继承于NSOperation的类,封装我们自己的操作类。
珲少
2018/08/16
3490
iOS多线程编程之二——NSOperation与NSOperationQueue
iOS 从实际出发理解多线程
前言 ----       多线程很多开发者多多少少相信也都有了解,以前有些东西理解的不是很透,慢慢的积累之后,这方面的东西也需要自己好好的总结一下。多线程从我刚接触到iOS的时候就知道这玩意挺重要的,但那时也是能力有限,没办法很好的理解它,要是只是查它的概念性的东西,网上一搜一大把,我们再那样去总结就显得意义不大了。这篇文章从我刚开始构思着去写的时候,就希望自己能换个角度去写,想从实际问题出发总结多线程,那就从第三方以及自己看到的一些例子还有前段时间读的多线程和内存管理的书中分析理解总结一下多线程。 这几
Mr.RisingSun
2018/02/06
8100
iOS 从实际出发理解多线程
多线程-NSOperation和NSOperationQueue
NSOperation类是用来封装在单个任务相关的代码和数据的抽象类。NSOperation 是苹果公司对 GCD 的封装,完全面向对象,所以使用起来更好理解。 ** 因为它是用来封装任务的,大家可以看到 NSOperation 和 NSOperationQueue 分别对应 GCD 的 任务 和 队列, 但是NSOperation本身又有执行多线程的能力跟GCD里的任务还是有区别的** 。
進无尽
2018/09/12
1.2K0
iOS多线程之四:NSOperation的使用
一、NSOperation NSOperation是苹果公司对GCD的封装,完全面向对象,但是比GCD拥有更强的可控性和代码可读性。所以使用起来更好理解。 NSOperation是一个抽象类,它不能直接使用,所以你必须使用NSOperation子类,使用最多的是它的两个子类:NSInvocationOperation和NSBlockOperation,但你也可以继承NSOperation来创建自己的类来执行操作。
s_在路上
2018/09/11
1.2K0
iOS多线程之四:NSOperation的使用
浅析iOS多线程编程之NSOperation
前言 和NSThread、GCD一样,NSOperation也是Apple提供的一项多线程并发编程方案。和GCD不同的是,NSOperation是对GCD在OC层面的封装,NSOperation完全面向对象。 默认情况下,NSOperation并不具备封装操作的能力,NSOperation是一个基类,要想封装操作,必须使用它的子类。使用NSOperation子类的方式有3种: 1> NSInvocationOperation(系统提供) 2> NSBlockOperation (系统提供) 3> 自定
VV木公子
2018/06/05
8.3K0
阿里、字节:一套高效的iOS面试题( 多线程 GCD底层原理篇)
dispatch_group_create() + dispatch_group_wait()
会写bug的程序员
2020/06/18
5K0
阿里、字节:一套高效的iOS面试题( 多线程 GCD底层原理篇)
多线程之NSOperation小结
相比NSInvocationOperation推荐使用NSBlockOperation,代码简单,同时由于闭包性使它没有传参问题。
woopDast1
2020/09/04
5010
iOS开发之多线程技术(NSThread、OperationQueue、GCD)
  在前面的博客中如果用到了异步请求的话,也是用到的第三方的东西,没有正儿八经的用过iOS中多线程的东西。其实多线程的东西还是蛮重要的,如果对于之前学过操作系统的小伙伴来说,理解多线程的东西还是比较容
lizelu
2018/01/11
8120
iOS开发之多线程技术(NSThread、OperationQueue、GCD)
iOS - 多线程(一):初识
安全+效率:因为 UIKit 框架不是线程安全的框架,当在多个线程进行 UI 操作,有可能出现资源抢夺,导致问题。
师大小海腾
2020/04/16
7250
Bison眼中的iOS开发多线程是这样的(一)
allluckly.cn.jpg 不知道大家面试iOS软件工程师的时候有没有遇到问多线程的?反正我遇到的还是蛮多的。下面是我面试时候的一个小场景!有点不堪?,看完不许笑啊..... 面试官:你
Bison
2018/07/04
5820
iOS多线程之GCD、OperationQueue 对比和实践记录
在计算的早期,计算机可以执行的最大工作量是由 CPU 的时钟速度决定的。但是随着技术的进步和处理器设计的紧凑化,热量和其他物理约束开始限制处理器的最大时钟速度。因此,芯片制造商寻找其他方法来提高芯片的总体性能。他们决定的解决方案是增加每个芯片上的处理器核心数量。通过增加内核的数量,一个单独的芯片可以每秒执行更多的指令,而不用增加 CPU 的速度或改变芯片的大小或热特性。唯一的问题是如何利用额外的内核。
woopDast1
2020/09/04
1.7K1
iOS多线程之GCD、OperationQueue 对比和实践记录
相关推荐
iOS-多线程详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档