關于閉包的循環引用

首先我們插入一段代碼




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中是一樣的都采用弱引用。如上。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容