模擬網路請求,封裝工具類,使用閉包變數對閉包進行強引用
//
// 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...