首先我們插入一段代碼
import UIKit
class ViewController: UIViewController {
//定義屬性保存閉包
var finished:(()->())? //閉包的返回值是可選類型
//定義屬性必須初始化;如果不想初始化,可以使用可選?來代替
override func viewDidLoad() {
super.viewDidLoad()
loadData {
print("回到主線程更新UI")
//在閉包中必須使用self
self!.view.backgroundColor = UIColor.redColor()
}
}
func loadData(finshed:()->()){
print("執行耗時操作")
self.finished = finshed
finshed()
}
//析構函數,相當于dealloc,釋放資源
deinit{
print("滾")
}
}
閉包中國年的finshed保存了一個閉包,當使用self.view.backgroundColor = UIColor.redColor()時,self控制器就會強引用閉包,閉包也強引用控制器,這樣就會造成循環引用,資源無法釋放。
解決循環引用在oc和swift中是一樣的都采用弱引用。如上。