学习笔记20-weak & unowned、Swift 常见编码实践、iOS开发者路线图、整洁架构和VIPER

306 阅读4分钟

weak & unowned

在 Swift 语言中,weak 和 unowned 是用来避免引用循环的,但是 weak 提供了更安全的机制,因为它会在实例被销毁时自动置为 nil。 weak 引用必须声明为可选类型,在调用属性或方法时,要加一个 ?,看上去没有那么美观。 unowned 效率更高,但使用风险更高,如果访问一个已经被销毁的实例的 unowned 引用,应用程序会崩溃。 一般来说,如果不能确定实例的生命周期,使用 weak 更加安全。如果确定实例总是存在,使用 unowned 会更高效。

Swift 常见编码实践

  • for Loop vs forEach
    • 为每个元素执行简单操作时,推荐 forEach
    • 需要控制循环流程(breakcontinue)场景下,推荐 for-in
  • 0 <= x && x <= 30 vs (0...30).contains(x)
    • 通常情况下推荐 .contains 方法
    • 性能要求特别严格的场景,传统的范围检查方式可能更合适
  • Loop for Transformations vs map
    • 当对集合的元素应用简单的转换时,推荐 map
    • 当转换逻辑复杂或者需要额外的控制流时,使用 for 循环
  • 非懒加载属性 vs 懒加载属性lazy
    • 当属性初始化成本高时,使用lazy
    • 对于需要立即使用的属性,避免使用lazy
    • 在多线程环境使用lazy时,需要考虑同步机制
  • class vs struct
    • 小的数据类型,推荐struct
    • 需要继承时,或者大的数据类型、不应该没拷贝的复杂数据类型时,使用class
    • 多线程环境下,struct可以提升线程安全和性能

iOS 开发者路线图

  • 编程语言
    • Swift
      • UIKit
        • 命令式编程
      • SwiftUI
        • 声明式编程
    • Objective-C
      • 面向对象编程
  • 编码基础
    • 代码简洁
    • 设计原则:SOLID
    • 设计模式
      • 创建型
      • 结构型
      • 行为型
    • 数据结构与算法
  • iOS 开发基础
    • Xcode IDE
    • App 状态
    • ViewController 生命周期
    • iOS 功能
      • 推送通知
      • Home Screen Quick Actions
      • App Clips
      • Widgets
      • Deep Links & Universal Links
  • 版本控制
    • Git 基础
    • 版本控制工具
      • Github
      • Gitlab
      • BitBucket
    • 策略
      • 发布火车(Release Train)
      • Gitflow
      • Trunk-Based
  • 架构模式
    • MVC
    • MVP
    • MVVM
    • MVVM-C
    • VIPER
  • 用户界面
    • iOS Human Interface Guidelines
    • Storyboard/XIB
      • 自动布局
      • Size Classes
      • IB Inspectable/IB Designable
    • 手写界面
  • 网络
    • URLSession
    • Alamofire
    • AFNetworking
    • GraphQL
  • 数据持久化
    • UserDefaults
    • NSCoding / Codable
    • Core Data
    • SwiftData
    • Realm
    • Keychain
    • Cloud
      • Firebase
      • iCloud
  • 内存管理
    • MRC
    • ARC
    • 循环引用
      • 强引用
      • 弱引用
      • Unowned 引用
  • 并发
    • GCD
    • Operations
    • Async/Await
  • 响应式编程
    • RxSwift
    • ReactiveCocoa
    • Combine
  • Accessibility
    • Accessibility Inspector
    • VoiceOver
    • Dynamic Type
  • 调试
    • LLDB
    • 断点
    • 界面层级调试
    • Memory Graph 调试
  • 编译
    • Build Signing
    • Build Settings
    • Build Phases
    • Build Rules
    • Scheme
    • Target
  • 性能
    • Instruments
      • CPU
      • 内存
      • 磁盘
      • 网络
    • MetricKit
  • 依赖管理
    • CocoaPods
    • Carthage
    • Swift Package Manager
  • Frameworks Creation
    • Static Library
    • Framework
    • XCFramework
  • Analytics
    • Firebase
      • Analytics
      • Crashlytics
    • New Relic
  • Testing
    • Unit Testing
      • XCTests
    • UI Testing
      • XCTests
      • Appium
    • Snapshot Testing
      • Facebook Snapshot
    • Beta Testing
      • TestFlight
      • Firebase App Distribution
  • 安全
    • 数据存储
      • 数据加密
        • CommonCrypto
        • CryptoKit
    • 通信
      • App Transport Security Settings
        • Exception Domains
        • SSL Pinning
    • 身份和访问管理
      • TouchID / FaceID
      • 服务端 Token 验证
    • 编码
      • 避免注入攻击
  • 国际化
    • 本地化
      • Localizable Strings
      • Pluralized Strings
  • 持续集成
    • CI 工具
      • Jenkins
      • Travis
      • Github Actions
      • App Center
    • Device Farms
      • AWS Device Farm
      • Firebase TestLab
      • BrowserStack
    • Fastlane
    • SwiftLint
  • 应用发布
    • App Sttore
    • Enterprise
      • MDM
        • Airwatch
        • Intune
  • 持续学习

整洁架构和 VIPER

整洁架构(Clean Architecture)是由罗伯特·C·马丁,又称 Uncle Bob,提出的一种软件设计架构。它强调软件系统的分层,其中每一层都有其明确的职责,以及这些层之间的依赖关系应该是单向且向内的。 VIPER 架构可以看作是整洁架构的一种实现方式,VIPER 的组件可以直接映射到整洁架构的某些层。 整洁架构通常由以下几层组成:

  • Entities(实体):代表应用程序的业务对象和业务规则。在 VIPER 中对应于 Entity 对象,它们代表业务模型。
  • Use Cases(用例):包含应用程序的业务逻辑。在 VIPER 中对应于 Interactor,它包含业务逻辑。
  • Interface Adapters(接口适配器):将用例层的输出适配到应用程序的其他部分,如UI或外部系统。在 VIPER 中对应于 Presenter,它将 Interactor 的输出适配到 View。
  • Frameworks and Driveres(框架和驱动):最外层,包括 UI、Web、数据库、第三方库等。在 VIPER 中对应于 View 和 Router,它们处理 UI 和导航。

CleanArchitecture.jpeg

参考文档