Swift3.0 循环引用

Swift3.0 循环引用_第1张图片
37D10644-6B3C-408D-9EFB-4B2051E12DAE.png

//创建一个导航栏控制器,控制器跳转跳转的controller内容如下---以下代码内容为循环引用

    //创建一个属性
    var completionCallBack:(()->())?
    
    override func viewDidLoad()
    {
        super.viewDidLoad()
        
        //在block中如果出现self. 需要注意
        //循环引用,单方向是不会产生引用的
        //只是闭包对slef执行了copy,闭包执行完成后会自动销毁,同时释放对self的引用
        //如果要循环应用,在闭包的同时用self引用
        LoadData { 
            print(self.view)
        }
    }
    
    func LoadData(completion:() ->()) -> ()
    {
        //使用属性记录闭包 -> self对闭包引用了
        completionCallBack = completion        //如果不写此句则不会实现循环引用
        
        //异步
        DispatchQueue.global().async {
            
            print("耗时操作")
            
            DispatchQueue.main.async{
                
                //回调 执行闭包
                completion()
            }
        }
    }
    
    //类似OC的dealloc
    deinit {
        print("走了")
    }

你可能感兴趣的:(Swift3.0 循环引用)