To avoid a retain cycle in Swift: - Use `weak` when a reference can become `nil`, such as delegates or optional parent references. - Use `unowned` only when the referenced object is guaranteed to outlive the referring object; otherwise prefer `weak`. - For escaping closures, put `[weak self]` at the beginning of the closure’s capture list: ```swift class ViewModel { var onUpdate: (() -> Void)? func configure() { onUpdate = { [weak self] in guard let self else { return } self.refresh() } } fun...
Scanned 9/5/2026
Install to Claude Code
npx -y skills add HoangNguyen0403/agent-skills-standard --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/hoangnguyen0403-swift-memory-management-agent-skills-standard)More formats (shields.io, HTML) on the badges page.
To avoid a retain cycle in Swift:
- Use `weak` when a reference can become `nil`, such as delegates or optional parent references.
- Use `unowned` only when the referenced object is guaranteed to outlive the referring object; otherwise prefer `weak`.
- For escaping closures, put `[weak self]` at the beginning of the closure’s capture list:
```swift
class ViewModel {
var onUpdate: (() -> Void)?
func configure() {
onUpdate = { [weak self] in
guard let self else { return }
self.refresh()
}
}
func refresh() {}
}
```
- Declare delegates as weak, and make the protocol inherit from `AnyObject`:
```swift
protocol MyDelegate: AnyObject {
func didUpdate()
}
class Controller {
weak var delegate: MyDelegate?
}
```
- For multiple references, capture each weakly when needed:
```swift
{ [weak self, weak delegate] in
self?.update()
delegate?.didUpdate()
}
```
- In two-way object relationships, make one side `weak`:
```swift
class Parent {
var child: Child?
}
class Child {
weak var parent: Parent?
}
```
Structs are copied by value, so they generally do not need a capture list for `self`. Strong references are the default under ARC, so explicitly choose `weak` or `unowned` wherever ownership could form a retain cycle.
Is 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!