- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我最近发现一篇文章说使用 [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]
而不必担心我的应用程序因 self
为 nil
。
我感到困惑的地方是,因为搜索是异步的,这是否意味着
self
can 是 nil
如果 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/
我继承了一个到处使用 disposeBags 的项目,但 disposeBag 似乎是一个巨大的内存泄漏。使用包的 View Controller 都没有被释放,这导致订阅堆积。我是 class Te
是否有任何内置方法可以将两个或多个 DisposeBag 合并为一个,在第一次触发时立即触发? 用例是这样的:我有一个 UIViewController 带有一些控件和他自己的 disposeBag;
我在公司项目中大量使用 RxSwift。当在 Instrument 中运行性能测试时,真正令人担忧的问题出现了。 每次调用 .addDisposableTo(disposeBag) 时,Instrum
我想取消一个请求,其中一种方法是手动移除一次性袋子。 .addDisposableTo(disposeBag) 因为我有disposeBag对象,除了我上面提到的之外,还有什么好的方法可以取消请求吗?
我是 RxSwift 框架的新手。我在我的 ViewController 中使用一次性用品,并在 DisposeBag 中添加一次性用品。 我应该在哪里释放 DisposeBag 以处理所有一次性用品
我们创建一个DisposeBag和一个Observable,订阅Observable然后addDisposableTo(disposeBag),我知道当 DisposeBag 将要 deinit 时,
我注意到在从入门部分 (https://github.com/ReactiveX/RxSwift/blob/master/Documentation/GettingStarted.md#debuggi
现在我需要根据配置 API 更改应用主题(颜色),所以我使用 RxCocoa、RxSwift 框架在每个 View Controller 上创建可观察对象以在应用上应用新主题。 我的问题是使用 Dis
首先对于令人困惑的标题感到抱歉,但实际上我想不出更好的东西(如果你想,请编辑)。 我有一个使用协调器模式和 RxSwift 的应用程序,所以总而言之,我想将所有导航相关的东西传递给协调器,这样它就可以
我尝试使用 RxSwift + MVVM 架构开发 iOS 应用程序。 我有个问题。谁应该拥有 DisposeBag 实例? 现在,我在我的代码中实现如下。 View 模型有一个“变量”的实例。 Co
我是 RxSwift 的新手,在这里我想问一个关于 DisposeBag 应该在哪里的问题。 我的情况是,我已经检索到在 tableview 中显示的项目列表,并且每个项目都有自己的标志来指示它是否被
我最近发现一篇文章说使用 [unowned self] 总是安全的,只要您将订阅添加到 DisposeBag 并且它在 View Controller 内. 假设我有一个 ViewController
我是一名优秀的程序员,十分优秀!