swift闭包的强引用

来源:互联网 发布:旺旺群发软件 编辑:程序博客网 时间:2024/06/08 02:53
import UIKitclass ViewController: UIViewController {//    var finishedCallBack: (html: String) -> ()?    var finishedCallBack: ((html: String) -> ())?        override func viewDidLoad() {        super.viewDidLoad()                //swift 写法3        //unowned 和OC中的__unsafe_unretained一样 会造成野指针访问        //iOS 4.0        loadData {[unowned self] (html) -> () in            print(self.view)        }    }        func method2() {        //swift 写法        //使用weak修饰的变量 被系统回收时  会指向 nil        //当对象指向nil 时  访问nil 不会造成野指针访问        //和OC中的 __weak 一样 iOS 5.0        loadData {[weak self] (html) -> () in            print(self?.view)        }    }                func method1() {        //仿OC的解决办法        //使用weak修饰的变量 被系统回收时  会指向 nil        weak var weakSelf = self        loadData { (html) -> () in            print(weakSelf?.view)        }    }        func loadData(finised: (html: String) -> () ) {                //记录闭包        finishedCallBack = finised        dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in            dispatch_async(dispatch_get_main_queue(), { () -> Void in                print("完成回调")                //在闭包中使用属性或者方法 必须加上self                //由于闭包可以从外界传递  如果不加self,调用上下文的就没有办法判断                self.finishedCallBack?(html: "hello world")            })        }    }        deinit {        print("VC 88")    }}

0 0
原创粉丝点击