iOS多线程里,这七个对象,1进程,2线程,3同步函数,4异步函数,5并行队列,6串行队列,7主线程主队列 可以说是几个非常核心的概念,动代码之前,理解这几个概念的区别和联系是非常重要的@2017-1月 1用面向对象的观点去理解,进程和线程,同步和异步,并行和串行,还有主线程的主队列,七者关系 进程:程序不运行时就是一堆代码,运行时就是一堆的进程的组
本文的主要目的是理解不同队列与不同函数之间组合的情况GCD简介GCD全称是Grand Central Dispatch纯C语言,提供例如非常强大的函数GCD优势GCD是苹果公司为多核的并行运算提出的解决方案GCD会自动利用更多的CPU内核(比如双核、四核)GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程)程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码【重点】用一句话
# iOS 子线程执行代码让主线程等待
在iOS开发中,常常会涉及到多线程的操作。由于主线程负责更新UI操作,长时间的计算会导致界面卡顿。因此,合理地使用子线程来执行耗时的操作,并在必要时让主线程等待,是开发中一个重要的技术点。本文将对此进行详细说明,并提供代码示例,帮助开发者更好地理解这一过程。
## 前言
在iOS中,主线程也被称为UI线程,负责处理用户交互和更新界面。当我们需要进行网络
一、RunLoop和线程有什么关系?每个线程,包括主线程(main thread),都有与之对应的RunLoop对象。主线程的RunLoop是默认启动的,子线程的RunLoop默认是不开启的,需要手动开启子线程的RunLoop。iOS程序里面,程序启动后会有这样的一个main()函数:int main(int argc, char * argv[]) {
@autoreleasepoo
转载
2023-12-20 06:12:54
129阅读
三十四、主线程操作UI(对UI进行更新只能在主线程进行) 解释:所谓的在主线程更新UI、操作UI,大致的意思就是设置UILabel的text或者设置tabbar的badgeValue,设置UIImageView的image等等。回到主线程方式1:[self performSelectorOnMainThread:@selector(updateImage:) withObject:dat
转载
2023-07-25 22:18:04
1389阅读
# iOS:回主线程执行的必要性与实现
在 iOS 开发中,主线程(也称为 UI 线程)是处理用户界面相关操作的重要线程。所有与 UI 相关的更新都必须在主线程上执行。这是因为 UIKit 不是线程安全的,任何在非主线程上更新 UI 的尝试都可能导致应用崩溃或不稳定。因此,了解如何将代码回到主线程执行,是每位 iOS 开发者都应掌握的技能。
## 一、主线程的概念
主线程是 iOS 应用程序
原创
2024-08-30 04:48:18
37阅读
队列GCD的队列可以分为2大类型 :串行队列(Serial Dispatch Queue)让任务一个接着一个有序的执行:不管队列里面放的是什么任务.一个任务执行完毕后,再执行下一个任务.同时只能调度一个任务执行.并发队列(Concurrent Dispatch Queue)可以让多个任务并发/同时执行.自动开启多个线程同时执行多个任务.同时可以调度多个任务执行并发队列的并发功能只有内部的任务是”异
一、简单介绍 1.队列的类型: 1.1主队列:main queue 主线程队列,更新UI的操作。是一个串行的队列,串行队列每次只处理一个任务。 1.2系统创建的并发队列:global queue(全局的 并行的队列),按照优先级分类。线程池提供多个线程来执行任务,所以按照FIFO的顺序并发启动、执
转载
2024-07-16 18:44:00
107阅读
iOS多线程技术—GCD的用法一、主队列介绍主队列:是和主线程相关联的队列,主队列是GCD自带的一种特殊的串行队列,放在主队列中得任务,都会放到主线程中执行。提示:如果把任务放到主队列中进行处理,那么不论处理函数是异步的还是同步的都不会开启新的线程。获取主队列的方式:1 //
2 // YYViewController.m
3 // 12-GCD的基本使用(主队列)
4 //
5 //
转载
2023-07-19 22:49:37
375阅读
在 iOS 开发中,如何确保在主线程上执行请求是一个常见问题。通过本文,我们将逐步附带代码、配置和测试方法,来帮助开发者解决“iOS 返回主线程执行请求”问题。此过程将包含以下结构:环境准备、分步指南、配置详解、验证测试、优化技巧和排错指南。
## 环境准备
### 软硬件要求
- 操作系统:macOS 10.15 或更高版本
- 开发工具:Xcode 12 或更高版本
- 设备:iPhone
# iOS 开发:回到主线程执行
在 iOS 开发中,我们经常会遇到在后台线程执行了耗时操作后需要回到主线程执行UI更新的情况。这是由于在 iOS 中,UI操作必须在主线程中执行,否则会导致UI界面卡顿或者出现其他问题。
## 为什么要回到主线程执行?
在 iOS 应用中,UI更新通常都是在主线程中执行的。当我们在后台线程执行了耗时操作后,如果直接在后台线程中执行UI更新操作,就会导致UI界
原创
2024-06-14 06:04:33
78阅读
在游戏软件或者其他软件中都有很多条线程,我们用OD附加进程以后点快捷栏上的“T”可以看到下图中的线程 每条线程是独立的,但是虽然是独立的线程,也要有一定的原则,线程和线程之间不可以产生数据访问或则逻辑等冲突,否则会导致游戏软件崩溃以及不可预知的错误。 游戏自身的线程无需我们操心,早已经做了严格的处理。 但是在我们去调用以及测试游戏功能CALL的时候就不一样了。 我们去创建一个线程然后调用功能CAL
转载
2023-10-11 23:13:37
50阅读
在ios编程中,多线程编程是很重要的一项技术。其实不光是ios里,在其他很多编程语言中多线程都占很重要的地位,在这里我记录下我对多线程编程的理解。
转载
2023-07-24 17:51:53
310阅读
多线程 有时候,我们需要下载文件,使用单线程的时候只能由这个线程进行下载任务,不能完全发挥所有计算机资源,如果我们使用的是多线程的话,那么我们就可以把文件进行分隔,每个线程同时下载文件的一部分,这样就能充分发挥计算机资源,这是多线程中的一个典型应用了。 锁
某些特殊情况下,可能多个线程需要用到计算机的同一个资源,访问这些资源的代码段叫做临界区,这些资源叫做临界资源。比如我们生活中常遇到的
复习线程优先级:10个优先级,最好只有3个,最低1、普通的5、最高的10,主线程默认优先级是5,优先级有继承关系,优先级高的线程,创建的子线程优先级也高守护线程:为用户线程(User Thread)提供支持服务的线程在Java中,一个线程要么是User Thread,要么是Daemon Thread如果程序中有User Thread在运行,则Daemon Thread也会一直运行,如果程序中所有的
6.在执行器中延时执行任务
前面两篇博客都是创建执行器之后启动任务会马上执行,这里如果不想让任务马上被执行,
而是想让任务在过一段时间后才被执行,或者任务能够被周期性地执行。可以使用执行器框架提供的
ScheduledThreadPoolExecutor类
这里推荐利用Executors工厂类来创建,
# iOS GCD异步执行与主线程更新的实现指南
在iOS开发中,处理多线程是一个必须掌握的技能。Grand Central Dispatch(GCD)是iOS中用于管理并发操作的强大工具。今天,我将带领你学习如何在GCD中进行异步执行,并在操作完成后更新主线程的UI。
## 流程概述
在我们开始之前,先来了解一下整个操作的流程。以下是步骤的总结:
| 步骤 | 操作描述
原创
2024-09-17 05:34:00
65阅读
第一部分:线程与队列线程是代码执行的路径,队列则是用于保存以及管理任务的,线程负责去队列中取任务进行执行。例如:在主线程调用如下代码1. dispatch_sync(queue, ^{
2. task()
3. }); 可以在task函数中log日志查看 1. -(void)task
2. {
3. NSLog(@"1. 当前线程是: %@, 当前
GCD是苹果公司提供的方便调用的并发代码库。dispatch queue苹果提供了三种类型的调度队列:主队列(global queue),全局队列(global dispatch queue)和自定义队列。--- 主队列是串行队列(队列里的任务一次只能执行一个),这个队列和主线程相关联,和UI变化的任务一定要在这个队列中去执行--- 全局队列是并发队列,按照不同的优先级(high, default
转载
2024-08-15 09:22:16
79阅读
上一篇文章我对GCD的几个基本概念做了介绍,但是大家看完了可能觉得对理解GCD并没有什么卵用。其实会用GCD其实很简单,只要记住两条就可以了。1. 主队列里的任务必须在异步函数中执行。 主队列里的任务如果在同步函数中执行,就会造成死锁。什么是死锁?容我举例来说明。 代码- (void)viewDidLoad {
[super viewDidLoad];
// 1.
转载
2023-10-02 20:48:08
91阅读