當使用閉包時,類本身持有self,然後又在閉包中訪問了self或者self的屬性,就會導致噁心額迴圈引用。swift提供的解決方法是在閉包中定義捕獲列表,捕獲列表是閉包想怎麼引用捕獲來的變數。例如下麵定義了一個捕獲列表,引用self為unowned引用,這樣在賓傲中用self就不會導致迴圈引用 去掉 ...
當使用閉包時,類本身持有self,然後又在閉包中訪問了self或者self的屬性,就會導致噁心額迴圈引用。swift提供的解決方法是在閉包中定義捕獲列表,捕獲列表是閉包想怎麼引用捕獲來的變數。例如下麵定義了一個捕獲列表,引用self為unowned引用,這樣在賓傲中用self就不會導致迴圈引用
let name = "cyy" lazy var someClosure: (Int, String) -> String = { [unowned self](index: Int, stringToProcess: String) -> String in print(stringToProcess + self.name) return self.name }
//列印的值為:
//lllcyy
//deinit >>><kuaixiaoyigou.LoginViewController: 0x7fde8a40acb0>
去掉捕獲列表
let name = "cyy" lazy var someClosure: (Int, String) -> String = { (index: Int, stringToProcess: String) -> String in print(stringToProcess + self.name) return self.name } //列印值: //lllcyy 沒有調用deinit