在Swift中捕获的领域通知

在Swift的Realm文档中,有关通知的部分有以下示例代码:

class ViewController: UITableViewController { var notificationToken: NotificationToken? = nil override func viewDidLoad() { super.viewDidLoad() let realm = try! Realm() let results = realm.objects(Person.self).filter("age > 5") // Observe Results Notifications notificationToken = results.addNotificationBlock { [weak self] (changes: RealmCollectionChange) in guard let tableView = self?.tableView else { return } // ... some code removed here ... } } deinit { notificationToken?.stop() } } 

我想知道为什么在这里使用[weak self]而不是[unowned self] 。 在什么用例可以self在这里? (在达到deinit之前)

在这种特定的情况下,它不能是nil因为在调用stop()之后永远不会调用通知块,并且unownedweak的使用只是为了使其更加健壮,在这种情况下,有人将代码复制并粘贴到看似相似的情况中,而这种情况实际上并不能保证self永远不会nil