Series Recap: What We've Covered

We've covered a lot of ground. Here's a quick reference of everything in this series.
Follow along with the code: iOS-Practice on GitHub
Concurrency Deep Dive
GCD & Threading
- Race conditions and serial queues
- Thread-safe collections
- Main thread violations
- DispatchQueue.main vs @MainActor
- Deadlocks: sync to same queue
- Lock ordering
Async/Await
- Task cancellation (cooperative)
- Debounced search
- Actor reentrancy
- Safe financial systems with actors
- Unstructured task leaks
- Structured vs unstructured concurrency
Combine
- Retain cycles with [weak self]
- Timer subscriptions
- Missing cancellables
- Multiple subscription management
Testing Mastery
Dependency Injection
- Refactoring singletons
- Protocol-based DI
- Decoupling network code
- Mock HTTP clients
- Testing time-dependent code
- DateProviding pattern
Side Effects
- Testing UserDefaults
- InMemoryKeyValueStore
- Abstracting file system
- In-memory file systems
Architecture & Mocking
- Testing ViewModels with @Published
- Repository pattern
- Mock vs Stub vs Fake vs Spy
- Spy mocks for interaction verification
- Testable service layers
Async Testing
- Testing async/await methods
- Testing TaskGroup operations
- Cache behavior testing
- Actor isolation in tests
SwiftUI Patterns
Lists & Data Loading
- Loading and error states
- ContentUnavailableView
- Pull-to-refresh
- Relative dates
- Search with debouncing
- Multi-filter lists
Grids & Layouts
- LazyVGrid photo galleries
- Sheet-based detail views
- Adaptive grids
- Grid/list mode transitions
Navigation
- NavigationStack master-detail
- Value-based NavigationLink
- Modal presentations
- Confirmation dialogs
- Swipe actions
- Passing data from modals
State Management
- Form validation
- Password strength indicators
- @StateObject vs @ObservedObject
- Shopping cart with EnvironmentObject
Key Patterns Summary
| Topic | Key Pattern |
|---|---|
| Thread safety | Serial queues or actors |
| Cancellation | Cooperative checking |
| Testing | Protocol + mock injection |
| State | @StateObject owns, @ObservedObject receives |
| Navigation | Value-based NavigationLink |
| Lists | Loading/success/empty/error states |
What's Next
The final two posts cover setting up the practice projects and resources for continued learning.