【发布时间】:2016-09-16 07:15:25
【问题描述】:
在 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?.invalidate() in Realm 10.12
notificationToken?.stop()
}
}
我想知道为什么这里使用[weak self] 而不是[unowned self]。在什么用例中self 在这里可以为零? (在到达deinit之前)
【问题讨论】:
-
Apple 说“使用弱引用只要它有效,该引用在其生命周期中的某个时刻变为 nil。相反,当您知道引用永远不会为零时,请使用无主引用已在初始化期间设置。”