swift基礎之自動引用計數

2021-07-12 03:15:24 字數 1799 閱讀 5561

自動引用計數

分為:

自動引用計數概念

引用計數策略

如何解決迴圈引用

閉包的迴圈引用

使用的到的關鍵字

weak   弱引用不會影響引用計數,一般時 optional

unowned  無主引用不會影響引用計數,一般時 非optional

概念:

在swift中 自動引用計數是例項的被引用次數儲存起來,當被引用次數變為零的時候,就將其釋放的過程。

自動引用計數可以實現自動資源管理的目的

引用計數策略:

1、強引用 (strong reference) ,引用時會導致引用計數 +1 ,失去引用時會使引用計數 -1

2、弱引用 (weak reference)   不會影響引用計數,一般時 optional

3、無主引用 (unowend reference)  不會影響引用計數,一般時 非optional

example:

class

dog //

析構器釋放

deinit }

引用計數

vardog1 :

dog?

vardog2 :

dog?

vardog3 :

dog?

dog1

= dog

(name:"淘氣

")  

//引用計數為1

dog2

= dog1

//引用計數為2

dog3

= dog1

//引用計數為3

輸出 dog

淘氣is init          

現在dog

的引用計數為3

取消引用計數

dog1

= nil

//引用計數為2

dog2

= nil

//引用計數為1

print

("ready nil dog3")

dog3

= nil

//引用計數為

0  呼叫了析構器

輸出 dog

淘氣is init

ready nil dog3

dog

淘氣is denint

表示 dog1,dog2 = nil 後 ,dog3 = nil ,例項才被釋放。

解決迴圈應用

自動引用計數會跟蹤我們所建立的乙個例項的引用數量,當引用計數為0的時候銷毀它,

但是有一種情況使引用計數永遠不能為0 ----------> 迴圈的強引用

迴圈的強引用:

兩個例項相互持有對方的強引用,每個例項都會讓對方一直存在。因為這2個例項永遠不會釋放,占有的資源永遠不會釋放掉,就導致了 — 記憶體洩露

解決迴圈引用的方法:

1、使用弱引用  關鍵字  weak在引用對方類的時候 在 前面 加weak

2、使用無主引用 關鍵字 unowend使用無主引用 注意,型別不能是optional,一定要賦值

example:

class

dogname

deinit }

swift自動引用計數

在少數情況下,arc為了能幫助你管理記憶體,需要更多的關於你的 之間關係的資訊 引用計數僅僅應用於類的例項,結構體和列舉型別是值型別,不是引用型別,也不是通過引用的方式儲存和傳遞 為了使之成為可能,無論你將例項賦值給屬性,常量或者是變數,屬性,常量或者變數,都會對此例項建立強引用。之所以稱之為強引用...

Swift學習之自動引用計數

class person deinit var reference1 person?var reference2 person?var reference3 person?reference1 person name iyaqi 此時會列印 person iyaqi is being initial...

Swift 自動引用計數(ARC)

swift使用自動引用技術 arc 這一機制來跟蹤和管理應用程式的記憶體。通常情況下我們不需要去手動釋放記憶體,因為arc會在類的例項不再被使用時,自動釋放其占有的記憶體。但在有些時候我們還是需要在 中實現記憶體管理。class person deinit 值會被自動初始化為nil,目前還不會引用到...