2019-12-04

2019-12-04  本文已影响0人  红色小星

swift 闭包循环引用产生以及处理

class DMDemoViewController: UIViewController {
  //  在Swift中,如果定义一个属性,那么这个属性必须初始化,否则就会报错,如果不想初始化,可以在后面加上?可选类型
  
  var callBackBlock:(()->())?

  override func viewDidLoad() {
      super.viewDidLoad()
      loadData {[weak self] in // [weak self] self 弱引用
//     Swift中尽量不写self,但是闭包中必须写self,因为闭包主要用来保存一段代码,什么时候执行是不确定的,为了防止闭包执行时对象被释放,其必须知道其中的方法和属性属于谁,所以要用self对该对象进行强引用
          // 1.闭包引用self
          self?.view.backgroundColor = UIColor.green
          print("更新UI")
          
      }
      // Do any additional setup after loading the view.
  }
  
  func loadData(callBackBlock:@escaping ()->())  {
      print("执行耗时操作")
//        2.self 引用 闭包
      self.callBackBlock = callBackBlock
      callBackBlock()
      
  }
  deinit {
      print(#file,#line,#function)
  }


}

上一篇下一篇

猜你喜欢

热点阅读