CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
iOS 开发入门/课时/并发与响应式
RawBlame
课时目录12 节

iOS 开发入门

  1. 01iOS 生态与 Xcode
  2. 02Swift 语言基础
  3. 03UIKit 与 Interface Builder
  4. 04SwiftUI 入门
  5. 05架构模式
  6. 06数据持久化
  7. 07网络与 API
  8. 08并发与响应式
  9. 09依赖管理与 CI
  10. 10测试与调试
  11. 11上架与 ASO
  12. 12综合练习

并发与响应式

GCD、Combine、RxSwift 概览。

35 分钟

并发与响应式

iOS 并发体系:GCD(Grand Central Dispatch)、OperationQueue、async/await,以及响应式框架 Combine(官方)与 RxSwift(社区)。对照 /roadmaps/ios「Concurrency」节点。

学习目标

  • 理解 Main Queue vs Background Queue 的分工
  • 用 GCD 与 async/await 执行异步任务
  • 掌握 Combine 的 Publisher / Subscriber 基础
  • 对照 Java 线程池与 React 异步模式

核心概念

GCD 与 Main Actor

import Foundation

func processImages(_ urls: [URL]) async -> [UIImage] {
    await withTaskGroup(of: UIImage?.self) { group in
        for url in urls {
            group.addTask {
                guard let data = try? Data(contentsOf: url),
                      let image = UIImage(data: data) else { return nil }
                return image
            }
        }
        var results: [UIImage] = []
        for await image in group {
            if let image = image { results.append(image) }
        }
        return results
    }
}

// UI 更新必须在主线程
DispatchQueue.main.async {
    self.tableView.reloadData()
}

// Swift 5.5+:@MainActor 标记 UI 相关类型
@MainActor
final class LessonViewModel: ObservableObject {
    @Published var lessons: [Lesson] = []

    func refresh() async {
        let fetched = try? await APIClient.shared.get("/lessons", as: [Lesson].self)
        lessons = fetched ?? []
    }
}

Main Actor 保证 UI 状态变更在主线程;TaskGroup 并行下载类似 Go 的 goroutine 组。

Combine 基础

import Combine

final class SearchViewModel: ObservableObject {
    @Published var query = ""
    @Published var results: [Track] = []

    private var cancellables = Set<AnyCancellable>()

    init(repository: TrackRepository) {
        $query
            .debounce(for: .milliseconds(300), scheduler: RunLoop.main)
            .removeDuplicates()
            .flatMap { q -> AnyPublisher<[Track], Never> in
                guard !q.isEmpty else { return Just([]).eraseToAnyPublisher() }
                return repository.searchPublisher(q)
                    .catch { _ in Just([]) }
                    .eraseToAnyPublisher()
            }
            .assign(to: \.results, on: self)
            .store(in: &cancellables)
    }
}

Combine 提供声明式数据流:debounce、map、flatMap 组合;SwiftUI 的 原生集成 Combine。

@Published

RxSwift 概览

RxSwift 是 ReactiveX 的 Swift 实现,API 与 Combine 类似(Observable、Disposable)。老项目可能仍在使用;新项目优先 Combine。

与 Java/Spring 或 React 对照

iOSJavaReact
GCD / DispatchQueueExecutorService—
async/awaitVirtual Thread / CompletableFutureasync/await
@MainActor@Async + UI 线程规则—
CombineReactor / RxJavaRxJS(少用)
TaskGroupparallelStream / fork-joinPromise.all

Spring WebFlux 的响应式流与 Combine 概念相近;React 18 并发特性(useTransition)解决 UI 阻塞,iOS 用 Main Actor 隔离。

练习

  • 用 TaskGroup 并发请求 3 个 API,合并结果
  • Combine 实现搜索框 300ms 防抖
  • 对比 Java CompletableFuture.allOf 与 TaskGroup 写法

小结

async/await + Main Actor 是 modern 并发;Combine 处理数据流。 下一课依赖管理。见 ios-essentials。

加载本节练习…
← 上一课网络与 API下一课 →依赖管理与 CI