---
title: Luôn dispose observer của NotificationCenter
impact: HIGH
impactDescription: Tránh memory leak và các hành vi không mong muốn khi observer vẫn tồn tại dù đối tượng đã bị giải phóng.
tags: swift, ios, notification-center, memory-leak, observer
---

## Luôn dispose observer của NotificationCenter

Luôn lưu lại token khi `addObserver` với NotificationCenter bằng block-based API. Gọi `removeObserver()` khi observer không còn cần thiết hoặc trong `deinit` để giải phóng bộ nhớ.

**Incorrect (không lưu token hoặc không remove):**

```swift
NotificationCenter.default.addObserver(forName: .myNotification, object: nil, queue: .main) { _ in
    print("Notification received")
}
// Không có cách nào để remove observer này sau đó
```

**Correct (lưu token và remove trong deinit):**

```swift
class MyManager {
    private var observer: NSObjectProtocol?

    init() {
        observer = NotificationCenter.default.addObserver(forName: .myNotification, object: nil, queue: .main) { _ in
            print("Notification received")
        }
    }

    deinit {
        if let observer = observer {
            NotificationCenter.default.removeObserver(observer)
        }
    }
}
```

**Tools:** SwiftLint (discarded_notification_center_observer)
