闭包循环引用([unowned self] 与 [weak self])

使用闭包时,经常需要考虑循环应用的问题,在swift中,解决该问题比较简单,使用闭包捕获列表[unowned self] 或 [weak self]

  • 区别:

    • 如果捕获(比如 self)可以被设置为 nil,也就是说它可能在闭包前被销毁,那么就要将捕获定义为 weak
    • 如果它们一直是相互引用,即同时销毁的,那么就可以将捕获定义为 unowned
textField.rx.text.orEmpty.asDriver().drive(onNext: {
            [weak self] text in
//            [unowned self] text in
            DispatchQueue.main.asyncAfter(deadline: .now() + 4) {
                print("当前输入内容:\(String(describing: text))")
                self?.label.text = text
            }
             
        }).disposed(by: disposeBag)

参考文章:Swift - RxSwift的使用详解42([unowned self] 与 [weak self])

你可能感兴趣的:(闭包循环引用([unowned self] 与 [weak self]))