在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()
之后永远不会调用通知块,并且unowned
。 weak
的使用只是为了使其更加健壮,在这种情况下,有人将代码复制并粘贴到看似相似的情况中,而这种情况实际上并不能保证self
永远不会nil
。