美文网首页
35 如何在Swift中创建一个线程

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

作者: 为了自由的白菜 | 来源:发表于2023-03-23 16:21 被阅读0次

如何在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-20230307225748147.png

初始化器

  • Thread(target:, selector:, object:)
image-20230307225906079.png
import UIKit
import PlaygroundSupport

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

更高级的抽象:CocoaOperation

概述

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

Operation

  • Operation
  • BlockOperation

主要状态

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

运行方式

  • sync
    • main()
  • async
    • start()
    • isAsynchronous : 是否异步的
    • isExecuting
    • isFinished
image-20230308203140236.png

OperationQueue

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

BlockOperation

image-20230308204104447.png

继承Operation

image-20230308204145615.png

Operation完成回调

  • completionBlock
image-20230308204305914.png

相关文章

网友评论

      本文标题:35 如何在Swift中创建一个线程

      本文链接:https://www.haomeiwen.com/subject/dsvirdtx.html