import UIKit class 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") } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。