class ViewController: UIViewController {
// Swift中定义属性, 必须在构造方法中初始化, 否则就必须加上?,?表示可选类型,可以有值,也可以没有值
// 注意: 以下写法代表闭包的返回值可以为nil
// var finished: ()->()?//这是一个错误的写法,表示闭包的返回值是可选类型
var finished: (()->())?
override func viewDidLoad() {
super.viewDidLoad()
// OC中 __weak typeof(self) weakSelf = self
weak var weakSelf = self
loadData { () -> () in
print("更新UI")
// 闭包和block很像, 都是提前准备好代码, 在需要时执行
// block会对外部变量进行copy, 保证执行代码时变量还在
// block中用到self一定要非常小心
// 闭包也一样, 为了能够准确定位到view, 所以需要写self
// 提示: Swift开发中能不写self就不写self, 一看到self就想到闭包
// self.view.backgroundColor = UIColor.redColor()//这行代码会造成内存泄漏
weakSelf!.view.backgroundColor = UIColor.redColor()//weakSelf 应该为可选类型,因为它依赖self,如果self释放掉了,它就没有值了
//在闭包中必须要写self,因为闭包执行的时间不一定,如果有self就意味着引用
}
}
func loadData(finished: ()->()){
print("耗时操作")
// 保存闭包
self.finished = finished
finished()
}
// 类似于dealloc方法
deinit
{
print("我滚了")
}
}