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

2021-08-19 06:09:55 字數 541 閱讀 9817

迴圈引用的產生原因:兩個物件互相之間強引用,導致互相不能釋放,後果就是兩個物件都不釋放,導致兩個物件的記憶體都不能釋放,這就會產生所謂的記憶體洩露。

swift閉包迴圈引用產生的兩個條件

1.物件對閉包強引用,即閉包是物件的屬性。

2.閉包中對物件強引用,閉包對閉包中的成員變數都會強引用一次。student的例項對printnum閉包強引用,閉包中又對self進行了強引用。

class student 

}var printnum:(()->())

deinit

}

解決方案

1.使用weak 或者 unowned 對self進行弱引用修飾,在閉包中使用弱引用後的self。區別在於前者得到的是可選,後者不是。

printnum =
printnum =
2.在閉包中不對self進行引用,直接引用我們需要引用的值。

printnum =

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

模擬網路請求,封裝工具類,使用閉包變數對閉包進行強引用 networkrequesttool.swift test created by fe on 2017 2 28.import uikit class networkrequesttool nsobject 在控制器中呼叫工具類,在閉包內使用s...

閉包的迴圈引用

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...