您的位置:首页 > 移动开发 > Swift

swift-闭包产生的循环引用以及解决办法

2016-07-16 20:25 651 查看
循环引用的概念,不做赘述,下面直接用一个小 demo,说明 swift 闭包产生的循环引用:

class ViewController: UIViewController {

// 声明一个闭包
var closure:(() -> ())?

override func viewDidLoad() {
super.viewDidLoad()

// 解决闭包循环引用

// 方式01(iOS 5.0)
//        closure = {[weak self] () -> () in
//
//            print(self?.view) // 要加 '?'
//
//        }

// 方式02(iOS 4.0)
//        closure = {[unowned self] () -> () in
//
//            print(self.view) // 不加 '?'
//
//        }

// 方式03
weak var weakSelf = self
closure = { () -> () in

print(weakSelf?.view)
}
}

// 重写 析构函数,看控制器是否被释放
deinit{

print("viewController挂了")
}
}


验证控制器是否被释放,在 sb 中嵌套一层 跳转关系,运行跳转即可.

具体可到下面地址 下载 小demo.

https://github.com/moon13sun/-
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  闭包 swift 循环引用