在 Swift 的 Realm 文档中,有关以下内容的部分通知 https://realm.io/docs/swift/latest/#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?.invalidate() in Realm 10.12
notificationToken?.stop()
}
}
我想知道为什么[weak self]
在这里使用而不是[unowned self]
。在什么用例中可以self
这里为零吗? (在到达之前deinit
)
在这种特殊情况下,不可能永远nil
因为通知块永远不会被调用stop()
被称为,并且unowned
就可以了。指某东西的用途weak
只是为了使其在有人将代码复制并粘贴到看似相似的情况下时更加健壮,但实际上并不能保证self
永远不会nil
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)