gpt4 book ai didi

ios - Rx swift : Is it safe to always use [unowned self] when a class has a disposeBag property?

转载 作者:搜寻专家 更新时间:2023-10-31 23:08:38 25 4
gpt4 key购买 nike

我最近发现一篇文章说使用 [unowned self] 总是安全的,只要您将订阅添加到 DisposeBag 并且它在 View Controller 内.

假设我有一个 ViewController,其中 deinit 由于强引用而未被调用:

class ViewController: UIViewController {

@IBOutlet weak var searchBar: UISearchBar!
@IBOutlet weak var tableView: UITableView!

private let disposeBag = DisposeBag()
private var results = Variable<[Item]>([])
private var searchText = Variable("")
var selectedCompletion: ((Item) -> Void)!

override func viewDidLoad() {
super.viewDidLoad()
results.asObservable()
.bind(to: tableView.rx.items(cellIdentifier: "CustomCell", cellType: CustomCell.self)) { row, item, cell in
cell.configure(with: item)
}
.disposed(by: disposeBag)

tableView.rx.itemSelected
.subscribe(onNext: { ip in
self.selectedCompletion(self.results.value[ip.row])
self.navigationController?.popViewController(animated: true)
})
.disposed(by:disposeBag)

searchBar.rx.text
.debounce(0.6, scheduler: MainScheduler.instance)
.subscribe(onNext: { searchText in
if searchText == nil || searchText!.isEmpty { return }
self.search(query: searchText!)
})
.disposed(by: disposeBag)
}

private func search(query: String) {
// Search asynchronously
search(for: query) { response in

// Some logic here...
self.results.value = searchResult.results
}
}
}

我应该能够简单地在我的订阅关闭中声明 [unowned self] 而不必担心我的应用程序因 selfnil

我感到困惑的地方是,因为搜索是异步的,这是否意味着 self cannil 如果 ViewController在查询完成之前弹出导航堆栈?

或者 disposeBag 会先被释放并且闭包不会完成吗?

任何关于如何知道一个类是否拥有闭包的说明也很好。

最佳答案

根据我的经验,将 unowned 与处置包一起使用是一种安全的方法,除了一个 block - onDisposed。曾出现过应用程序因 unowed 关键字而崩溃的情况 -> weak 在这里很有用。

关于ios - Rx swift : Is it safe to always use [unowned self] when a class has a disposeBag property?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46844148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com