在Swift的Realm文档中,notifications部分有以下示例代码:
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
之前)
答案 0 :(得分:2)
在这种特定情况下,它不能nil
,因为在调用stop()
后永远不会调用通知块,unowned
就可以了。 weak
的使用只是为了使其更加健壮,因为有人将代码复制并粘贴到看似相似的情况中,实际上并不能保证self
永远不会nil
。