35 如何在Swift中创建一个线程

简介: 如何在Swift中创建一个线程

如何在Swift中创建一个线程

写作前面

  • 为什么几乎所有的GUI框架都是单线程的?

多线程可以做什么

  • 网络请求
  • IO
  • 计算
  • 数据模型转化
  • ......

多线程编程的方式

  • Thread
  • Cocoa Operation (Operation和OperationQueue)
  • Grand Central Dispath(GCD)

Thread

  • Thread在三种多线程技术中是最轻量级的,但需要自己管理线程的生命周期和线程同步。线程同步对数据的加锁会有一定得系统开销

快捷方式创建

  • detachNewThread(_ block: @escaping() -> Void)
  • detachNewThreadSelector(_ selector: Selector, to Target target: Any, with argument: Any?)

image.png

初始化器

  • Thread(target:, selector:, object:)

image.png

importUIKitimportPlaygroundSupport//不希望在执行完主线程的代码后就退出PlaygroundPage.current.needsIndefiniteExecution=true

更高级的抽象:CocoaOperation

概述

  • 面向对象
  • Operation + OperationQueue
  • 取消,依赖,任务优先级,复杂逻辑,保存业务状态,子类化

Operation

  • Operation
  • BlockOperation

主要状态

  • isReady : 是不是准备好了
  • isExecuting : 是不是在执行
  • isFinished : 是不是已经完成了
  • isCancelled : 是不是取消了

运行方式

  • sync
  • main()
  • async
  • start()
  • isAsynchronous : 是否异步的
  • isExecuting
  • isFinished

image.png

OperationQueue

  • OperationQueue队列里可以加入很多个Operation,可以把OperationQueue看做一个线程池,可往线程池中添加操作(Operation)到队列中
  • 底层使用GCD
  • maxConcurrentOperationCount可以设置最大并发数
  • defaultMaxConcurrentOperationCount根据当前系统条件动态确定的最大并发数
  • 可以取消所有Operation,但是当前正在执行的不会取消
  • 所有Operation执行完毕后退出销毁

BlockOperation

image.png

继承Operation

image.png

Operation完成回调

  • completionBlock

image.png







目录
相关文章
|
6月前
|
安全 调度 Swift
【Swift开发专栏】Swift中的多线程与并发编程
【4月更文挑战第30天】本文探讨Swift中的多线程与并发编程,分为三个部分:基本概念、并发编程模型和最佳实践。介绍了线程、进程、并发与并行、同步与异步的区别。Swift的并发模型包括GCD、OperationQueue及新引入的结构体Task和Actor。编写高效并发代码需注意任务粒度、避免死锁、使用线程安全集合等。Swift 5.5的并发模型简化了异步编程。理解并掌握这些知识能帮助开发者编写高效、安全的并发代码。
204 1
|
安全 前端开发 API
37 Swift如何保证线程安全和同步
Swift如何保证线程安全和同步
152 0
|
网络性能优化 API 调度
36 Swift多线程编程新思路:GCD
Swift多线程编程新思路:GCD
104 0
|
安全 iOS开发
iOS开发Swift篇(02) NSThread线程相关简单说明
iOS开发Swift篇(02) NSThread线程相关简单说明 一 说明   1)关于多线程部分的理论知识和OC实现,在之前的博文中已经写明,所以这里不再说明。   2)该文仅仅简单讲解NSThread在swift语境中的一些使用和注意点,别他。
916 0
|
4月前
|
Unix 调度 Swift
苹果iOS新手开发之Swift 中获取时间戳有哪些方式?
在Swift中获取时间戳有四种常见方式:1) 使用`Date`对象获取秒级或毫秒级时间戳;2) 通过`CFAbsoluteTimeGetCurrent`获取Core Foundation的秒数,需转换为Unix时间戳;3) 使用`DispatchTime.now()`获取纳秒级精度的调度时间点;4) `ProcessInfo`提供设备启动后的秒数,不表示绝对时间。不同方法适用于不同的精度和场景需求。
150 3
|
4天前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
13 2
|
20天前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户点击按钮时,按钮将从圆形变为椭圆形,颜色从蓝色渐变到绿色;释放按钮时,动画以相反方式恢复。通过UIView的动画方法和弹簧动画效果,实现平滑自然的过渡。
37 1
|
29天前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
【10月更文挑战第18天】本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户按下按钮时,按钮将从圆形变为椭圆形并从蓝色渐变为绿色;释放按钮时,动画恢复原状。通过UIView的动画方法和弹簧动画效果,实现平滑自然的动画过渡。
50 5