swift闭包的强引用
发布时间:2020-12-14 01:30:06 所属栏目:百科 来源:网络整理
导读:import UIKitclass ViewController: UIViewController {// var finishedCallBack: (html: String) - ()? var finishedCallBack: ((html: String) - ())? override func viewDidLoad() { super.viewDidLoad() //swift 写法3 //unowned 和OC中的__unsafe_unret
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") } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |