weak & unowned
在 Swift 语言中,weak 和 unowned 是用来避免引用循环的,但是 weak 提供了更安全的机制,因为它会在实例被销毁时自动置为 nil。 weak 引用必须声明为可选类型,在调用属性或方法时,要加一个 ?,看上去没有那么美观。 unowned 效率更高,但使用风险更高,如果访问一个已经被销毁的实例的 unowned 引用,应用程序会崩溃。 一般来说,如果不能确定实例的生命周期,使用 weak 更加安全。如果确定实例总是存在,使用 unowned 会更高效。
Swift 常见编码实践
for LoopvsforEach- 为每个元素执行简单操作时,推荐
forEach - 需要控制循环流程(
break、continue)场景下,推荐for-in
- 为每个元素执行简单操作时,推荐
0 <= x && x <= 30vs(0...30).contains(x)- 通常情况下推荐
.contains方法 - 性能要求特别严格的场景,传统的范围检查方式可能更合适
- 通常情况下推荐
Loop for Transformationsvsmap- 当对集合的元素应用简单的转换时,推荐
map - 当转换逻辑复杂或者需要额外的控制流时,使用
for循环
- 当对集合的元素应用简单的转换时,推荐
- 非懒加载属性 vs 懒加载属性
lazy- 当属性初始化成本高时,使用
lazy - 对于需要立即使用的属性,避免使用
lazy - 在多线程环境使用
lazy时,需要考虑同步机制
- 当属性初始化成本高时,使用
classvsstruct- 小的数据类型,推荐
struct - 需要继承时,或者大的数据类型、不应该没拷贝的复杂数据类型时,使用
class - 多线程环境下,
struct可以提升线程安全和性能
- 小的数据类型,推荐
iOS 开发者路线图
- 编程语言
- Swift
- UIKit
- 命令式编程
- SwiftUI
- 声明式编程
- UIKit
- Objective-C
- 面向对象编程
- Swift
- 编码基础
- 代码简洁
- 设计原则: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
- Instruments
- 依赖管理
- CocoaPods
- Carthage
- Swift Package Manager
- Frameworks Creation
- Static Library
- Framework
- XCFramework
- Analytics
- Firebase
- Analytics
- Crashlytics
- New Relic
- Firebase
- Testing
- Unit Testing
- XCTests
- UI Testing
- XCTests
- Appium
- Snapshot Testing
- Facebook Snapshot
- Beta Testing
- TestFlight
- Firebase App Distribution
- Unit Testing
- 安全
- 数据存储
- 数据加密
- CommonCrypto
- CryptoKit
- 数据加密
- 通信
- App Transport Security Settings
- Exception Domains
- SSL Pinning
- App Transport Security Settings
- 身份和访问管理
- TouchID / FaceID
- 服务端 Token 验证
- 编码
- 避免注入攻击
- 数据存储
- 国际化
- 本地化
- Localizable Strings
- Pluralized Strings
- 本地化
- 持续集成
- CI 工具
- Jenkins
- Travis
- Github Actions
- App Center
- Device Farms
- AWS Device Farm
- Firebase TestLab
- BrowserStack
- Fastlane
- SwiftLint
- CI 工具
- 应用发布
- App Sttore
- Enterprise
- MDM
- Airwatch
- Intune
- MDM
- 持续学习
整洁架构和 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 和导航。