Prevent retain cycles via ARC, weak/unowned references, and Capture Lists in Swift. Use when managing Swift ARC, avoiding retain cycles, or configuring capture lists in closures.
Scanned 9/4/2026
Install to Claude Code
npx -y skills add gabrielmoreira/agent-skills-mirror --skill swift-memory-management --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Swift Memory Management?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/gabrielmoreira-swift-memory-management)More formats (shields.io, HTML) on the badges page.
---
name: swift-memory-management
description: Prevent retain cycles via ARC, weak/unowned references, and Capture Lists in Swift. Use when managing Swift ARC, avoiding retain cycles, or configuring capture lists in closures.
metadata:
triggers:
files:
- '**/*.swift'
keywords:
- weak
- unowned
- capture
- deinit
- retain
---
# Swift Memory Management
## **Priority: P0 (CRITICAL)**
## Implementation Guidelines
### ARC Fundamentals
- **Default**: Strong references. ARC handles retain/release automatically.
- **Weak**: Use weak if the reference can become nil during its lifetime (delegates, optional parent refs).
- **Unowned**: Use unowned if the reference is guaranteed to outlive referring object (rare; prefer `weak`).
### Capture Lists
- **Closures**: `[weak self]` at beginning of the closure's capture list. Pattern: `{ [weak self] in guard let self = self else { return } }`.
- **Self in Structs**: No list needed — `self` copied by value.
- **Multiple Captures**: `[weak self, weak delegate]`.
### Retain Cycles
- **Delegates**: `weak var delegate` always. Protocol inherits from AnyObject (e.g., `protocol MyDelegate: AnyObject {}`)..
- **Closures as Properties**: Use `weak` or `unowned` in capture list.
- **Two-way References**: One side must `weak`.
## Anti-Patterns
- **No strong var delegate**: Use weak.
- **No self in escaping closures**: Use [weak self].
- **No unowned unless certain**: Default to weak to prevent crashes.
## References
- [Capture Lists & Retain Cycles](references/implementation.md)
## Canonical response anchors
When this skill applies, preserve the following domain terminology or equivalent concrete examples in the answer when relevant:
- beginning of the closure's capture list
- inherits from AnyObject
- unowned if the reference is guaranteed
- weak if the reference can become nil
- Additional task-grounded exact anchors: retain cycleIs this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!