Skillshub swift-memory-management

Standards for ARC, Weak/Unowned References, and Capture Lists. Use when managing Swift ARC, avoiding retain cycles, or configuring capture lists in closures. (triggers: **/*.swift, weak, unowned, capture, deinit, retain)

install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/HoangNguyen0403/agent-skills-standard/swift-memory-management" ~/.claude/skills/comeonoliver-skillshub-swift-memory-management && rm -rf "$T"
manifest: skills/HoangNguyen0403/agent-skills-standard/swift-memory-management/SKILL.md
source content

Swift Memory Management

Priority: P0

Implementation Guidelines

ARC Fundamentals

  • Default: Strong references. Swift automatically manages retain/release.
  • 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 the referring object (rare; prefer weak).

Capture Lists

  • Closures: Place
    [weak self]
    at the beginning of the closure's capture list. Pattern:
    { [weak self] in guard let self = self else { return } }
    .
  • Self in Structs: No capture list needed (
    self
    is copied by value).
  • Multiple Captures:
    [weak self, weak delegate]
    .

Retain Cycles

  • Delegates: Always
    weak var delegate
    . The delegate protocol should inherit from AnyObject (e.g.,
    protocol MyDelegate: AnyObject {}
    ).
  • Closures as Properties: Use
    weak
    or
    unowned
    in capture list.
  • two-way References: One side must be
    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