Use a class-bound delegate protocol and make the delegate reference `weak`: ```swift protocol MyDelegate: AnyObject { func didFinish() } final class Worker { weak var delegate: MyDelegate? func finish() { delegate?.didFinish() } } ``` Because the delegate reference is weak, `Worker` does not retain its delegate, preventing a retain cycle. Use `weak` when the delegate can become `nil`; use `unowned` only if the delegate is guaranteed to outlive the referring object. For closures stored as prop...
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-43a1e12d)More formats (shields.io, HTML) on the badges page.
Use a class-bound delegate protocol and make the delegate reference `weak`:
```swift
protocol MyDelegate: AnyObject {
func didFinish()
}
final class Worker {
weak var delegate: MyDelegate?
func finish() {
delegate?.didFinish()
}
}
```
Because the delegate reference is weak, `Worker` does not retain its delegate, preventing a retain cycle. Use `weak` when the delegate can become `nil`; use `unowned` only if the delegate is guaranteed to outlive the referring object.
For closures stored as properties, capture `self` weakly at the beginning of the closure’s capture list:
```swift
final class Controller {
let worker = Worker()
func start() {
worker.onComplete = { [weak self] in
guard let self = self else { return }
self.handleCompletion()
}
}
private func handleCompletion() {}
}
```
For multiple references, use `[weak self, weak delegate]`.
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!