swift 閉包迴圈引用的解決辦法

2021-07-27 17:33:08 字數 1005 閱讀 5347

模擬網路請求,封裝工具類,使用閉包變數對閉包進行強引用

//

// networkrequesttool.swift

// test

//// created by fe on 2017/2/28.

//import uikit

class networkrequesttool: nsobject }}

}

在控制器中呼叫工具類,在閉包內使用self會造成迴圈引用,使用三種方法可以解決閉包的迴圈引用

//

// viewcontroller.swift

// test

//// created by fe on 2017/2/28.

//import uikit

class viewcontroller: uiviewcontroller

override func didreceivememorywarning()

override func touchesbegan(_ touches: set, with event: uievent?)

*//*

//第二種解決閉包迴圈引用的用法 [weak self]

requesttool.loaddata

*///第三種解決閉包迴圈引用的用法 [unowned self]

//__weak :oc的關鍵字,__weak修飾的弱引用,如果指向的物件銷毀,那麼指標會立馬指向nil(0x0)

//__unsafe_unretained :oc的關鍵字,__unsafe_unretained修飾的弱引用,如果指向的物件銷毀,那麼指標依然指向以前的記憶體位址,很容易產生「野指標」/「殭屍物件」

//unowned :swift關鍵字,和oc的__unsafe_unretained關鍵字類似

requesttool.loaddata

}deinit

}

Swift中閉包的迴圈引用及改正

迴圈引用的產生原因 兩個物件互相之間強引用,導致互相不能釋放,後果就是兩個物件都不釋放,導致兩個物件的記憶體都不能釋放,這就會產生所謂的記憶體洩露。swift閉包迴圈引用產生的兩個條件 1.物件對閉包強引用,即閉包是物件的屬性。2.閉包中對物件強引用,閉包對閉包中的成員變數都會強引用一次。stude...

閉包的迴圈引用

unowned self 面試題 請說出工作中遇到的迴圈引用 不要說沒有遇到過 class viewcontroller uiviewcontroller func loaddata completion 析構函式 類似於 oc 的 dealloc deinit 方法一 1.方法一,類似於 oc 的...

Swift自定義資料模型及閉包的迴圈引用問題

在使用 kvc 的時候,如果 值沒有分配空間 如果是結構體 類,會先呼叫預設的建構函式分配空間,然後再設定數值 如果是基本資料型別,就直接崩潰 var name string?var icon string?var intro string?var no int 0 init dict string...