![](/img/trans.png)
[英]Memory management: retain cycle with weak var, non retain cycle with unowned. Why?
[英]preventing retain cycle with weak/unowned self in Realm notification block
我不確定我是否正確掌握了閉包中無主/弱項的概念,但是我一直在閱讀RealmSwift文檔,並想問為什么https://realm.io/docs/中的示例代碼swift / latest /#interface-driven-writes不實現weak self
token = collection.observe { changes in
switch changes {
case .initial:
tableView.reloadData()
case .update(_, let deletions, let insertions, let modifications):
// Query results have changed, so apply them to the UITableView
tableView.beginUpdates()
tableView.insertRows(at: insertions.map({ IndexPath(row: $0, section: 0) }),
with: .automatic)
tableView.deleteRows(at: deletions.map({ IndexPath(row: $0, section: 0)}),
with: .automatic)
tableView.reloadRows(at: modifications.map({ IndexPath(row: $0, section: 0) }),
with: .automatic)
tableView.endUpdates()
case .error(let error):
// handle error
()
}
}
但是https://realm.io/docs/swift/latest/#object-notifications確實可以
notificationToken = results.observe { [weak self] (changes: RealmCollectionChange) in
guard let tableView = self?.tableView else { return }
switch changes {
case .initial:
// Results are now populated and can be accessed without blocking the UI
tableView.reloadData()
case .update(_, let deletions, let insertions, let modifications):
// Query results have changed, so apply them to the UITableView
tableView.beginUpdates()
tableView.insertRows(at: insertions.map({ IndexPath(row: $0, section: 0) }),
with: .automatic)
tableView.deleteRows(at: deletions.map({ IndexPath(row: $0, section: 0)}),
with: .automatic)
tableView.reloadRows(at: modifications.map({ IndexPath(row: $0, section: 0) }),
with: .automatic)
tableView.endUpdates()
case .error(let error):
// An error occurred while opening the Realm file on the background worker thread
fatalError("\(error)")
}
}
第一個示例不使用weak/unowned
,因為沒有使用self.
。 但是第二個示例包含:
guard let tableView = self?.tableView else { return }
因此,在這種情況下,您應該使用weak/unowned
,因為您在閉包內部捕獲了self
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.