---
title: Delegate phải được đánh dấu là weak
impact: HIGH
impactDescription: Tránh giữ chặt đối tượng (strong reference) dẫn đến retain cycle và rò rỉ bộ nhớ (memory leak).
tags: swift, ios, delegate, weak, memory-leak
---

## Delegate phải được đánh dấu là weak

Trong mô hình Delegation, đối tượng nhận ủy quyền (delegate) thường sở hữu đối tượng thực hiện ủy quyền. Để tránh vòng lặp tham chiếu mạnh (retain cycle), thuộc tính `delegate` phải luôn được khai báo với từ khóa `weak`. Điều này đảm bảo rằng khi View Controller hoặc đối tượng chủ quản bị giải phóng, delegate cũng có thể được giải phóng theo.

**Incorrect (giữ tham chiếu mạnh):**

```swift
class MyView: UIView {
    var delegate: MyViewDelegate? // Nguy cơ memory leak
}
```

**Correct (dùng tham chiếu yếu):**

```swift
class MyView: UIView {
    weak var delegate: MyViewDelegate? // An toàn
}
```

**Tools:** SwiftLint (weak_delegate)
