美文网首页
2019-12-04

2019-12-04

作者: 红色小星 | 来源:发表于2019-12-04 17:02 被阅读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)
      }
    
    
    }
    
    

    相关文章

      网友评论

          本文标题:2019-12-04

          本文链接:https://www.haomeiwen.com/subject/rmdkgctx.html