在开始多线程之前,我们先来了解几个比较容易混淆的概念。概念线程与进程线程与进程之间的关系,拿公司举例,进程相当于部门,线程相当于部门职员。即进程内可以有一个或多个线程。并发和并行并发指的是多个任务交替占用CPU,并行指的是多个CPU同时执行多个任务。好比火车站买票,并发指的是一个窗口有多人排队买票,而并行指的是多个窗口有多人排队买票。同步和异步同步指在执行一个函数时,如果这个函数没有执行完毕,那么
转载
2024-01-10 16:47:46
121阅读
条件锁 NSConditionLock1、定义条件锁就是有特定条件的锁,所谓条件只是一个抽象概念,由程序猿自定义。说白了就是「有条件的互斥锁」.对于NSConditionLock,官方文档的描述是这样的:使用NSConditionLock对象,可以确保线程仅在满足特定条件时才能获取锁。 一旦获得了锁并执行了代码的关键部分,线程就可以放弃该锁并将关联条件设置为新的条件。 条件本身是任意的:您可以根据
转载
2024-08-03 16:25:12
52阅读
本文参考:《iOS移动开发从入门到精通 第二版》(编著:李发展 ) 第14章 多线程技术,感兴趣的可以读下原著本文主要描述iOS线程的基本概念,以及Thread、Operation和grand central dispatch三种多线程技术的使用。一、 任务、进程和线程简述1.1 任务 Task任务既可以是一个线程,也可以是一个进程,是指为了达到目的的一组操作集合。1.2 进程 Process进程
转载
2023-10-25 13:29:19
80阅读
swift多线程segue的一个技巧在故事版里面任何建立会和controller交互的string,比如segue的identifier,可以在controller中使用一个struct来装载它们。private struct storyboard{
static let showPicture = "show picture"
}zooming(delegation)首先要把UIView
转载
2023-09-22 17:59:15
169阅读
先把常用的Demo放前面,方便查找,能满足绝大多数需求,各种理论后续再补充在后面。1.延迟执行let delay = DispatchTime.now() + .seconds(10)//计算需要开始的时间
print("添加了一个10秒后执行的任务")
DispatchQueue.main.asyncAfter(deadline: delay) {
转载
2023-08-04 12:43:52
164阅读
虽然很多程序员可以对异步、GCD等等与线程相关的概念说的天花乱坠。但是实质上深挖本质的话,大多数人并不能很好的区分Race Condition,Atomic,Immutable对象在线程安全中真正起到的作用。所以今天就以这篇文章来谈谈我所理解的线程安全。首先就允许我从Immutable来开始整篇话题吧。Immutable最近几年,Immutable这个说法开始越来越流行。比如用过Swift的人都知
转载
2023-09-23 01:27:04
73阅读
swift的多线程学习同OC一样,分三者来学习,Thread,Operation和GCD首先:Thread 每个对象对应一个线程,优点是量级较轻,使用简单,缺点是需要开发者自行管理线程的生命周期,线程同步,加锁解锁,睡眠以及唤醒灯操作其次:Operation技术上不需要关心线程的管理和线程同步的事情,只需要关系业务的处理逻辑,缺点是只能实现它或者使用它的定义好的子类最后:就是实际应用最多的GCD了
转载
2023-06-12 16:38:01
140阅读
在 Swift 中有个有趣的现象:它没有与线程相关的语法,也没有明确的互斥锁/锁(mutexes/locks)概念,甚至 Objective-C 中有的 @synchronized 和原子属性它都没有。幸运的是,苹果系统的 API 可以非常容易地应用到 Swift 中。今天,我会介绍这些 API 的用法以及从 Objective-C 过渡的一些问题,这些灵感都来源于 Camer
转载
2023-08-22 01:11:28
245阅读
毫不夸张的说,80%的程序员对于多线程的理解都是浅陋和错误的。就拿我从事的iOS行业来说,虽然很多程序员可以对异步、GCD等等与线程相关的概念说的天花乱坠。但是实质上深挖本质的话,大多数人并不能很好的区分Race Condition,Atomic,Immutable对象在线程安全中真正起到的作用。 所以今天就以这篇文章来谈谈我所理解的线程安全。 首先就允许我从Immutable来开始整篇话题吧。
转载
2024-06-28 11:25:10
54阅读
线程锁是什么 在前面的文章中总结过多线程,总结了多线程之后,线程锁也是必须要好好总结的东西,这篇文章构思的时候可能写的东西得许多,只能挤时间一点点的慢慢的总结了,知道了线程之后要了解线程锁就得先了解一下什么是“线程锁”。 “线程锁”一段代码在同一个时间内是只能被一个线程访问,为了避免在同一时间内
转载
2024-02-05 08:05:32
80阅读
//
// ViewController16.swift
// swiftT
//
// Created by wjwdive on 2020/6/1.
// Copyright © 2020 wjwdive. All rights reserved.
//
import UIKit
class ViewController16: UIViewController {
ove
转载
2023-08-19 17:39:19
81阅读
三种线程操作Thread: 最轻,灵活度高,可以取消。但是只能有一个传参。Operation: 操作对象+队列,可以取消,可以自己控制操作对象何时结束。Grand Central Dispatch: 调度对象,操作对象, 目前没有找到取消方法。Thread官方文档Thread 最轻,灵活度最高方法1,使用实例方法直接创建主线程并调用执行。方法2,创建新线程,调用 start() 或 main()
转载
2023-10-08 19:34:09
161阅读
swift的多线程学习 同OC一样,分三者来学习,Thread,Operation和GCD 首先:Thread 每个对象对应一个线程,优点是量级较轻,使用简单,缺点是需要开发者自行管理线程的生命周期,线程同步,加锁解锁,睡眠以及唤醒灯操作 其次:Operation技术上不需要关心线程的管理和线程同步的事情,只需要关系业务的处理逻辑,缺点是只能实现它或者使用它的定义好的
转载
2023-11-21 15:46:37
131阅读
NSThread 是苹果官方提供的,面向对象,简单易用。程序员需要控制线程的生命周期,对线程对象进行操作。1. 首先说一下线程的生命周期,线程的生命周期分为 创建 - 就绪 - 运行 - 堵塞 - 死亡 这五种情况,在NSThread中, 我们最主要的就是对创建, 就绪这两步进行操作。创建:实例化一个线程对象。就绪:将线程对象添加到可调度线程池,等待CPU调用。运行:CP
转载
2023-10-08 19:43:41
175阅读
线程锁是什么 在前面的文章中总结过多线程,总结了多线程之后,线程锁也是必须要好好总结的东西,这篇文章构思的时候可能写的东西得许多,只能挤时间一点点的慢慢的总结了,知道了线程之后要了解线程锁就得先了解一下什么是“线程锁”。 “线程锁”一段代码在同一个时间内是只能被一个线程访问,为了避免在同一时间内
转载
2023-06-09 14:05:43
729阅读
实现一个线程安全的栈这里使用数组来存储栈的数据。不足之处在于本例中的Stack可以无限扩容,更好的是初始化时候指定一个最大容量,防止不断扩容申请内存导致内存不够的问题。这里的线程安全使用一个串行队列来保证,实际上也可以通过加锁或者信号量甚至自旋锁来解决。struct Stack<Element> {
private var items: [Element]
转载
2023-06-08 09:29:51
200阅读
Swift 中var生命的变量默认是非原子性的,如果要保证线程安全,我们就需要引入锁的感念。注意:谨慎直接在Demo中用for+print()等来证明是否线程安全。因为print()方法本身是线程安全的,它可能会拯救你的不安全代码。第3节objc_sync部分的例子有print()和NSLog()的比较,结果仅作参考。本文将着重介绍NSCondition以及DispatchSemaphore
本文
转载
2023-10-11 20:57:24
344阅读
一、前言数组对于大部分语言而言,都是相同数据类型的元素的集合,是非常常见的一种数据类型,正因为它非常常见,所以针对它的优化往往能达到立竿见影的效果。为了运行测试代码,可以通过 Xcode→File→New→Project→command line tool 创建一个命令行程序工程,并新建一个任意名字的 swift 文件进行编辑开发。如果是在非 Mac 环境下通过 swift 命令行进行编译,可以编
转载
2023-10-08 06:44:26
109阅读
let animation = UIViewAnimation()
animation.animate(view: self.background, fn: {
DispatchQueue.main.async {
self.setCoverImage(coverUrl: coverUrl)
转载
2023-06-06 14:30:48
164阅读
在 Swift 开发中,线程阻塞问题常常导致应用的性能下降,用户体验恶化。本文将详细记录解决“Swift 阻塞线程”的过程,包括背景、错误现象、根因分析、解决方案、验证测试和预防优化。
### 问题背景
在iOS开发中,UI线程的阻塞意味着应用不再响应用户输入,导致用户体验极差。例如,当一个耗时操作(如网络请求或文件处理)在主线程中执行时,UI无法更新,用户的任何操作会被忽视。可以用以下数学模型