- Use value types (`struct`, `enum`) over reference types (`class`) by default — they enable stack allocation and copy-on-write optimization.
- Avoid retain cycles with `[weak self]` or `[unowned self]` in closures — use Instruments' Leaks tool to detect memory issues.
- Use `lazy var` for expensive computed properties that aren't always accessed — defer initialization until first use.
- Prefer structs over classes for stack allocation.
- Use `[weak self]` in closures to prevent retain cycles.
- Use `lazy var` for deferred expensive initialization.
- Profile with Instruments: Time Profiler, Allocations, Leaks.